g ++链接器undefined仅引用共享库中的某些函数(不是全部)

时间:2017-01-11 15:18:24

标签: c++ c++11 linker g++

我正在尝试使用g ++链接到linux中的第三方库 我的g ++命令是

g++ -o "outdir/libmyLib.so.1.0" -Wl,--trace-symbol=_foo_bar_baz -Wl,--no-undefined -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -shared -Wl,--verbose obj_a.o obj_b.o foobarwrapper.o   -L/usr/local/lib/foobar `pkg-config --libs gtk+-3.0` -Wl,--start-group -llots -lof -ldeps -lfoobar -lz -ldl -lm -Wl,--end-group

这会从链接器

中产生未定义的引用
GNU ld (GNU Binutils for Ubuntu) 2.26.1
1>     Supported emulations:
1>      elf_x86_64
1>      elf32_x86_64
1>      elf_i386
1>      elf_iamcu
1>      i386linux
1>      elf_l1om
1>      elf_k1om
1>      i386pep
1>      i386pe
1>   using internal linker script:
1>   ==================================================
1>   /* Script for --shared -z combreloc -z now -z relro: shared library, combine & sort relocs */
1>   
1>   attempt to open /usr/local/lib/foobar/libfoobar.so succeeded
1>   /usr/local/lib/foobar/libfoobar.so: definition of _foo_bar_baz
1>   /obj/x64/Debug/foobarwrapper.o: In function `foobarwrapper::ThreadEntryRoutine()':
1>   /foobarwrapper.cpp:479: undefined reference to `_foo_bar_baz()'
1>   collect2: error: ld returned 1 exit status

我从这个库中总共使用了大约30个函数,但只有4个函数会生成链接器错误。

我试过将-lfoobar移动到不同的地方。它要么没有区别,要么所有库函数都无法链接。

我已经尝试将-lfoobar添加到编译命令中,根据对类似问题的一些答案/评论,但仍然没有爱。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

用extern“C”{}包装lib的头文件的#includes似乎完成了这项工作。