我正在研究一個必須在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
你是說nm for Mac版本,它給出鏈接器錯誤,表明庫包含符號? – 2009-05-05 15:11:39
是的!我對發生的事情毫無頭緒。 – claf 2009-05-05 15:13:44
「_the_symbol」是否出現在您的源代碼中,並且它是一個未初始化的全局變量?是在你的源代碼中引用? – 2009-05-05 15:22:16