链接失败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
答
lfs.h
从NBIS只是℃。您需要启用C链接为lfs.h
:
extern "C" {
#include <lfs.h>
}
此外,您应该不需要使用g++
手动链接libc++
或libm
。
链接顺序很重要,试试'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