2016-03-22 30 views
0

我正在使用OSX命令行gcc並嘗試構建動態庫。當我進行構建時,我收到以下警告。給出/ usr/lib是衆所周知的,它是如何找不到這個庫的?和/ usr/lib下確實在我的機器上存在ld:warning:目錄找不到選項:-LC_ID_DYLIB =/usr/lib

這是我在用的:

gcc -arch i386 cata/*.c -dynamiclib -o build/cata.dylib -LC_ID_DYLIB=/usr/lib 

感謝

+0

帶有'gcc','-L'是一個參數的開始,預計包含一個包含庫的目錄的路徑。似乎要做的事情是將某個環境變量設置爲'/ usr/lib'。這是不正確的。什麼是'-LC_ID_DYLIB',它是如何在程序中使用的? – user3629249

+0

參數:'-dynamiclib'也不是一個有效的參數,建議閱讀'http://tigcc.ticalc.org/doc/comopts.html'頁面,該頁面列出'gcc'的所有有效參數。你可能想看看使用'-static'參數和不使用該參數的區別。 – user3629249

+0

嗨,我的蘋果開發者指南似乎說明兩個參數都可以使用。不過,我現在似乎有一個解決方法。使我想要使用它的問題是我正在構建的動態庫繼承其動態加載字符串中的「build/cata.dylib」路徑。 - 任何想使用它的東西都必須在'build/cata.dylib'中找到它們相對於它們所在的位置。這很不方便。我會自己回答我是如何解決它的。 – Div

回答

0

我解決它,使它的方式,使陷入了串圖書館(在運行時在哪裏找到圖書館)是相對無處 - 如果這是有道理的。所以它將被迫使用LD_LOAD_PATH。

我正在使用其他標誌,因爲有人建議我使用它們。

,所以我結束了使用gcc的是這樣的:

# my tree is like this 
# cata/*.c 
# build/*.dylib 
# 
cd build 
gcc -arch i386 ../cata/*.c -dynamiclib -o cata.dylib 

這樣做編譯/使圖書館在它認爲它是「拿來主義」(基本上沒有路徑)的目錄中。我現在可以自由地把它放在別的地方。當它稍後在編譯時通過不同的程序鏈接,然後使用

otool -L 

它在庫名前面沒有路徑出現。當系統試圖找到它來尋找標準庫並最終找到它(因爲我將它安裝到其中一個標準位置)時,這顯然更可取。

在原始的方式,otool -L是表示具有它的

'build/cata.dylib' 

所需的路徑這使得未找到和這就是爲什麼我試圖使用蘋果的文檔來解決問題。

這並不能解決爲什麼LC_ID_DYLIB不起作用。我看着Loader.h文件(第643行),它有一個標識符(0xd),一個路徑和一個結構的空間,所以我不明白爲什麼我的路徑沒有被拾起。但它的兩個不同的主題。 Loader.h是運行時,另一個是gcc AFAIK。我仍然在學習蘋果。