我正在創建一個可以使用GDAL的C++程序(如果有的話)。我可以在系統中檢查GDAL的存在,但是如果我的程序是使用GDAL編譯的,我需要如何編寫我的程序來包含/不包含GDAL庫?如何在我的C++程序中使用GDAL庫作爲可選項?
非常感謝, 卡洛斯。
我正在創建一個可以使用GDAL的C++程序(如果有的話)。我可以在系統中檢查GDAL的存在,但是如果我的程序是使用GDAL編譯的,我需要如何編寫我的程序來包含/不包含GDAL庫?如何在我的C++程序中使用GDAL庫作爲可選項?
非常感謝, 卡洛斯。
儘管我沒有使用過CMake,但是如果庫可用,您可以鏈接它並將標誌傳遞給定義宏的編譯器(例如-DHAVE_GDAL
)。然後在源文件中使用預處理器檢查HAVE_GDAL
,如果已定義,則只使用GDAL功能。
像這樣的事情在你的源:
#ifdef HAVE_GDAL
// Use GDAL functionality
#else
// Use something else
#endif
雖然CMake是一個很棒的工具,但我認爲OP的功能之一是能夠使用/不使用GDAL _after_已經編譯GDAL支持。 – Robert 2012-04-19 08:35:54
一般而言,如果將應用程序鏈接到共享對象(DLL),如果共享對象丟失,則您的程序將無法啓動。我不確定是否有另一種方法,而不是簡單地在啓動時加載SO,並且如果您獲得了庫的句柄,請使用dlsym(或Windows上的GetProcAddress)來獲取所需的函數,並以這種方式調用它們。
什麼操作系統您使用的?什麼編譯器?什麼構建系統? – 2012-04-19 08:16:57
Linux,g ++,cmake。 – QLands 2012-04-19 08:21:33