2009-04-16 49 views
4

我設置LIBRARY_SEARCH_PATHS/opt/local/lib,並證實有問題的庫是那裏(我鏈接到GLEW):爲什麼Xcode不能識別我的LIBRARY_SEARCH_PATHS?

$ls /opt/local/lib 

libGLEW.1.5.1.dylib libfreetype.a  libz.a 
libGLEW.1.5.dylib libfreetype.dylib libz.dylib 
libGLEW.a  libfreetype.la  pkgconfig 
libGLEW.dylib  libz.1.2.3.dylib 
libfreetype.6.dylib libz.1.dylib 

但Xcode中給我的鏈接錯誤

library not found for -lGLEW 

我使用CMake生成Xcode項目,所以我不想明確修改Xcode項目(如果有人建議將它添加爲框架或類似的東西)。 Xcode識別USER_HEADER_SEARCH_PATHS正常(如this question);爲什麼它不在這裏工作?

回答

2

也許在你的CMakeLists.txt中添加這樣的東西?

find_library(GLEW_LIB GLEW /opt/local/lib) 
if(NOT ${GLEW_LIB}) 
    message(FATAL_ERROR "Could not find GLEW") 
endif() 
target_link_libraries(myprogram ${GLEW_LIB} ...) 

其中myprogram是需要鏈接庫的目標可執行文件的名稱。您將替換...與您在該可執行文件上使用的其他庫。

這樣CMake會爲您處理庫路徑細節。

1

Xcode適用於潛在的多個SDK,所以無論您何時定義這些類型的東西(如HEADER_SEARCH_PATHS或LIBRARY_SEARCH_PATHS),當前的SDK根目錄都會被添加到傳遞給鏈接程序的實際路徑。

因此,一個使這項工作的方法是將您的目錄添加到SDK。例如,假設你與Mac OS X 10.5 SDK構建,您可以添加您的選擇DIR:

ln -s /opt /Developer/SDKs/MacOSX10.5.sdk/opt 

你的庫現在將您的系統上找到。

如果你不想這樣做,那麼你將不得不看看CMake,並找出如何讓它爲你的實際庫生成一個庫需求(我對CMake一無所知,所以我不能幫助你)。這也是爲什麼你會看到USER_HEADER_SEARCH_PATHS和HEADER_SEARCH_PATHS之間的區別。

作爲另一種選擇,你也可以指定與OTHER_LDFLAGS這個路徑建立變量:

OTHER_LDFLAGS=-L/opt/local/lib 

這將導致鏈接程序搜索的/ opt/local/lib目錄,以及它的標準路徑,並不會要求您生成不同的項目文件。

相關問題