2009-05-05 63 views
1

我正在研究一個必須在linux和mac os X上編譯的庫。直到現在,我沒有問題,編譯時使用「-g」在兩種操作系統下運行良好。使用-O2編譯時未定義的符號僅在Mac上編譯

我試着用一些優化(「-02」)進行編譯和它運作良好,在linux下,但我得到一個未定義的符號,當我試圖把一個程序和我的圖書館在Mac OS X鏈接

有誰有什麼線索我應該尋找什麼?

nm mylib.a | grep _the_symbol 

這將返回Linux和Mac一樣的東西(沒有linux下的下劃線領先):

154:00000018 C _the_symbol 
377:   U _the_symbol 

這裏是linux下的編譯行使用庫的程序:

/usr/bin/gcc -std=c99 CMakeFiles/prod-cons.dir/prod-cons.c.o -o prod-cons -rdynamic -L/home/claferri/dev/build/src ../src/libckaapi.a -lpthread -Wl,-rpath,/home/claferri/dev/build/src 

根據mac:

/usr/bin/gcc -std=c99 -Wl,-search_paths_first -headerpad_max_install_names -fPIC CMakeFiles/prod-cons.dir/prod-cons.c.o -o prod-cons -L/Volumes/Data/claferri/Work/build/src ../src/libckaapi.a /usr/lib/libpthread.dylib 
+0

你是說nm for Mac版本,它給出鏈接器錯誤,表明庫包含符號? – 2009-05-05 15:11:39

+0

是的!我對發生的事情毫無頭緒。 – claf 2009-05-05 15:13:44

+0

「_the_symbol」是否出現在您的源代碼中,並且它是一個未初始化的全局變量?是在你的源代碼中引用? – 2009-05-05 15:22:16

回答

0

請注意,以下是猜測,除非/直到您提供了正在使用的確切編譯器標誌,否則我無法確定 - 但Xcode默認設置爲-fvisibility=hidden,這會隱藏庫中的任何符號除非它被聲明爲可見。

你可以在Linux上做同樣的事情,但GCC的默認不是隱藏符號。

您會在這裏找到更多的信息:http://gcc.gnu.org/wiki/Visibility

1

這裏是在一種變通方法猜測:嘗試建立圖書館與-fno-共同的旗幟。如果你有這個變量的多個定義,你需要將「extern」添加到除一個之外的所有變量。

相關問題