2012-04-19 2 views
0

Я создаю программу на C++, которая может использовать GDAL (если присутствует). Я могу проверить наличие GDAL в системе, но как мне нужно закодировать мою программу, чтобы включить/не включать библиотеки GDAL, если моя программа была скомпилирована с использованием GDAL?Как использовать библиотеку GDAL как необязательную в моей программе на C++?

Большое спасибо, Carlos.

+0

Какую операционную систему вы используете? Какой компилятор? Какая система сборки? –

+0

Linux, g ++, cmake. – QLands

ответ

1

Хотя я не использовал CMake, но если библиотека доступна, вы можете связать ее, а также передать флаг компилятору, определяющему макрос (например, -DHAVE_GDAL). Затем в вашем источнике вы используете препроцессор для проверки на HAVE_GDAL и используете только функцию GDAL, если она определена.

Что-то вроде этого в источнике:

#ifdef HAVE_GDAL 
// Use GDAL functionality 
#else 
// Use something else 
#endif 
+0

Хотя CMake - отличный инструмент, я думаю, что OP следует использовать/не использовать GDAL _after_, он был скомпилирован с поддержкой GDAL. – Robert

0

Вообще говоря, если вы связываете свое приложение с общим объектом (DLL), ваша программа не запустится, если отсутствует общий объект. Я не уверен, есть ли другой способ, чем просто загрузить SO при запуске, и если вы получите дескриптор библиотеки, используйте dlsym (или GetProcAddress в Windows), чтобы получить необходимые функции и назовите их таким образом ,

+0

Да, я знаю. Но GDAL не является обязательным. Поэтому мое программное обеспечение может/не может включать заголовки GDAL. Итак, как я могу закодировать мое приложение для включения/отсутствия заголовков GDAL? – QLands

+0

О, вы можете включить заголовки, но вы не можете связать свой исполняемый файл с библиотекой. – Robert