碰到的一个小问题:Linux下 gcc、g++ 以及 CMakeLists.txt 包含库文件的顺序问题

原本用C语言写好的测试代码,经过测试无误后,封装成了一个静态库 libXXX.a文件,其中使用了多个线程,在后续编译时需要包含 libthread.so 的动态库。

 

先简单记录一下编译静态库的指令。

首先将所有 .c 文件编译为 .o 文件,指令是:

gcc -c xxx.c xxx.o

然后打包静态库,指令是:

ar cr libXXX.a xxx1.o xxx2.o xxx3.o

库函数必须是lib开头。

 

之后在 C++ 工程中使用了这个静态库,使用 cmake 来管理工程

添加头文件路径

include_directories( 静态库的头文件路径 )

添加库文件路径

link_directories( 静态库的所在路径)

最后使用

 target_link_libraries(目标 所有的库包括自己的静态库)

 

这里就要注意了,因为前面提到在静态库中使用了多线程,需要包含 libpthread.so 。在最后的 target_link_libraries 的库列表中,必须把 pthread 写在 XXX 的后面;否则就会编译出错,这可能是链接器的内部规则吧。

 

同样道理使用 gcc、 g++ 命令直接进行编译时,也必须让 pthread 写在 XXX 后面。

类似:

g++ -o test test.cpp -I静态库头文件路径 -L静态库所在路径 -lXXX -lpthread

 

你可能感兴趣的:(碰到的一个小问题:Linux下 gcc、g++ 以及 CMakeLists.txt 包含库文件的顺序问题)