0
我試圖使用NBIS圖書館在OS X,但我得到了一個問題:鏈接失敗NBIS庫
Undefined symbols for architecture x86_64:
"distance(int, int, int, int)", referenced from:
_main in test-2db11c.o
ld: symbol(s) not found for architecture x86_64
我使用.a
歸檔嘗試,還有.o
文件在那裏 - 沒有運氣 - 同樣的問題。
的源代碼我試圖編譯(TEST.CPP):
#include <iostream>
#include <lfs.h>
using namespace std;
int main() {
cout << distance(1, 2, 3, 4) << endl;
}
這裏是我試過的執行線(失敗):
$> g++ -std=c++11 -ggdb -g -Wall test.cpp -o test.bin -lm -lc++
$> g++ -std=c++11 -ggdb -g -Wall test.cpp -o test.bin -lm -lc++ -L/NBIS/Main/lib -lmindtct
$> g++ -std=c++11 -ggdb -g -Wall test.cpp -o test.bin -lm -lc++ -L/NBIS/Main/lib -l:libmindtct.a
$> g++ -std=c++11 -ggdb -g -Wall test.cpp /NBIS/Main/lib/libmindtct.a -o test.bin -lm -lc++
$> g++ -std=c++11 -ggdb -g -Wall test.cpp /NBIS/Main/lib/util.o -o test.bin -lm -lc++
只是爲了確認庫實際上已經聲明瞭方法,我查了一下libmindtct.a
檔案裏面有什麼:
$> ar t libmindtct.a
__.SYMDEF SORTED
<MANY FILES .o>
util.o
<SOME MORE .o FILES>
$> ar -x libmindtct.a util.o
$> nm util.o
U ___stderrp
00000000000008d0 T _angle2line
U _atan2
0000000000000a10 T _closest_dir_dist
0000000000000600 T _distance
00000000000008a0 T _find_incr_position_dbl
U _fmod
U _free
U _fwrite
0000000000000650 T _in_int_list
0000000000000920 T _line2direction
U _malloc
0000000000000000 T _maxv
0000000000000360 T _minmaxs
00000000000001b0 T _minv
0000000000000690 T _remove_from_int_list
0000000000000630 T _squared_distance
編譯我使用這個庫下面:
$> cd ~/Downloads/NBIS/
$> ./setup.sh /NBIS/Main --64
$> make config && make it && make install LIBNBIS=no && make catalog
鏈接順序很重要,試試'g ++ -std = C++ 11 test.cpp -o test.bin -lname'假設你的庫名是'libname.a'並且,如果我沒有弄錯,在OSX中你的程序默認情況下鏈接到數學庫。所以'-lm'是多餘的。我不明白你想通過'lC++'來完成什麼 – sjsam
請閱讀這個問題。這甚至沒有接近解決方案。另外,http://bibcxx.llvm.org/ – RafazZ
順便說一句,我沒有提出解決方案,我只是說你編譯它的方式是錯誤的。通常,將鏈接器選項放置在「-o ouput」選項後面,以便鏈接庫的順序。例如'gcc -lm in.c -o in.out'與'gcc in.c -o in.out -lm'不同,前者在我的linux中失敗,如果我使用的是數學庫中的函數。請原諒我對'lC++'的評論,我沒有得到你想要完成的內容:)祝你好運 – sjsam