链接失败NBIS库

问题描述:

我试图使用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

lfs.h从NBIS只是℃。您需要启用C链接为lfs.h

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

此外,您应该不需要使用g++手动链接libc++libm