工作中gn编译出现的-pthread和-lpthread的问题

gn编译中,因为涉及多平台的编译,windows、cortex-a9、cortex-a7-poky在生成一个动态库的时候都没问题,

但是当在x86-64平台编译时,却一直提示:

hidden symbol `pthread_atfork' in /opt/gcc-linaro-aarch64-linux-gnu-4.9-2014.09_linux/bin/../aarch64-linux-gnu/libc/usr/lib/aarch64-linux-gnu/libpthread_nonshared.a(pthread_atfork.oS) is referenced by DSO

发现protobuff应该用了pthread,其他linux平台编译通过应该是因为arm平台的libpthread.so估计是把pthread_atfork函数包含了,应该是啊,没有完全确定

但是x86_64平台呢,需要用到libpthread_nonshared.a的静态库

 

这次错误生成的库sdk没问题,但是使用这个sdk库的demo程序后出错:

一开始以为只要在demo的gn里配置了-pthread就行,试验了后发现不行,必需在sdk的库里也添加这个编译选项,按理说动态库只需要链接一份就行了

这儿都需要链接应该是pthread_atfork用的是一个静态库(libpthread_nonshared.a),所以需要所有用到protobuffer库的也都链接一次这个静态库libpthread_nonshared.a)

 

疑问:一个.so库依赖与另一个.so库,编译时必需链接一下依赖的库吗?还是说在最后的生成可执行程序时统一链接所依赖的库???

 

-pthread和-lpthread的区别:

https://www.cnblogs.com/stonehat/p/7275927.html

 

gn编译里:

可以用  ldflags = [ "-pthread" ] 添加-pthread选项

如果用    libs += [ "pthread" ] ,用的其实是-lpthread选项

 

gn入门:

https://www.cnblogs.com/bigben0123/p/12643839.html

链接原理:https://www.cnblogs.com/xiaomanon/p/4210016.html

https://segmentfault.com/a/1190000016433897

objdump:https://blog.csdn.net/shenyan008/article/details/6598950

ldd指令:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值