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指令: