碰到的一个小问题: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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值