我遇到需要编译C代码和C ++代码以及链接到C ++静态库的情况。
这可以通过使用以下命令来实现:
gcc file.cpp file.c -xc++ -pthread -std=c++11 -lstdc++ -shared-libgcc -L/path -l:liba.a -lm -o program
但是,如果我更改链接命令的顺序(切换-lm
和-l:libary.a
),如下所示:
gcc file.cpp file.c -xc++ -pthread -std=c++11 -lstdc++ -shared-libgcc -lm -L/path -l:liba.a -o program
这不起作用,因为编译器抱怨:
liba.o: undefined reference to symbol 'log@@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
为什么会这样?