原本用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