2012-04-19 18 views
0

我正在創建一個可以使用GDAL的C++程序(如果有的話)。我可以在系統中檢查GDAL的存在,但是如果我的程序是使用GDAL編譯的,我需要如何編寫我的程序來包含/不包含GDAL庫?如何在我的C++程序中使用GDAL庫作爲可選項?

非常感謝, 卡洛斯。

+0

什麼操作系統您使用的?什麼編譯器?什麼構建系統? – 2012-04-19 08:16:57

+0

Linux,g ++,cmake。 – QLands 2012-04-19 08:21:33

回答

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 2012-04-19 08:35:54

0

一般而言,如果將應用程序鏈接到共享對象(DLL),如果共享對象丟失,則您的程序將無法啓動。我不確定是否有另一種方法,而不是簡單地在啓動時加載SO,並且如果您獲得了庫的句柄,請使用dlsym(或Windows上的GetProcAddress)來獲取所需的函數,並以這種方式調用它們。

+0

是的,我知道。但GDAL是可選的。所以我的軟件可以/不能包含GDAL頭文件。那麼,我如何編寫我的應用程序來包含/或不包含GDAL頭文件? – QLands 2012-04-19 08:26:06

+0

哦,你可以包含標題,但是你不能將你的可執行文件鏈接到庫。 – Robert 2012-04-19 08:34:58

相關問題