2016-07-30 84 views
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 
+0

鏈接順序很重要,試試'g ++ -std = C++ 11 test.cpp -o test.bin -lname'假設你的庫名是'libname.a'並且,如果我沒有弄錯,在OSX中你的程序默認情況下鏈接到數學庫。所以'-lm'是多餘的。我不明白你想通過'lC++'來完成什麼 – sjsam

+0

請閱讀這個問題。這甚至沒有接近解決方案。另外,http://bibcxx.llvm.org/ – RafazZ

+0

順便說一句,我沒有提出解決方案,我只是說你編譯它的方式是錯誤的。通常,將鏈接器選項放置在「-o ouput」​​選項後面,以便鏈接庫的順序。例如'gcc -lm in.c -o in.out'與'gcc in.c -o in.out -lm'不同,前者在我的linux中失敗,如果我使用的是數學庫中的函數。請原諒我對'lC++'的評論,我沒有得到你想要完成的內容:)祝你好運 – sjsam

回答

0

lfs.h從NBIS只是℃。您需要啓用C鏈接爲lfs.h

extern "C" { 
     #include <lfs.h> 
} 

此外,您應該不需要使用g++手動鏈接libc++libm