解决Linux编译中”库”找不到它”依赖”的问题

记得我还很年轻的时候,不懂事,居然去碰了Linux…
一碰傻2年, 两年后我果断去了深圳,再也没碰linux了,玩起了单片机和ARM后来随着年龄的增长,我回到了厦门,重新捡起了Linux,生活是多么的不容易啊!有一次交叉编译一个应用程序它依赖于libnats.so(这玩意是一个通讯总线类似mqtt但比mqtt更强大)但这个libnats.so在编译过程中又依赖一个叫libcrypto.so.1.1 和 libssl.so.1.1的库提示:

/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libssl.so.1.1, needed by /opt/arm-libs/arm64/lib/libnats.so, not found (try using -rpath or -rpath-link)
/usr/lib/gcc-cross/aarch64-linux-gnu/5/../../../../aarch64-linux-gnu/bin/ld: warning: libcrypto.so.1.1, needed by /opt/arm-libs/arm64/lib/libnats.so, not found (try using -rpath or -rpath-link)
/opt/arm-libs/arm64/lib/libnats.so:对‘SSL_CTX_use_certificate_chain_file@OPENSSL_1_1_0’未定义的引用
/opt/arm-libs/arm64/lib/libnats.so:对‘OPENSSL_init_ssl@OPENSSL_1_1_0’未定义的引用
/opt/arm-libs/arm64/lib/libnats.so:对‘X509_get_issuer_name@OPENSSL_1_1_0’未定义的引用

不知道啥心情,明明libcrypto.so.1.1 和 libssl.so.1.1就在指定的目录下,文件格式、属性都正确,居然说找不到简直就抓狂。。。我也居然自己下了一个openssl-1.1.0k.tar.gz自己编译起来, 这玩意真生成Make的方式真特别,不提了,说多了都是泪(我前面的日志中有写)其实没明白gcc编译的一些隐含的工作原理,再怎么折腾都是瞎折腾。。。
好了废话不多说!进入/etc/ld.so.conf.d

boen@ubuntu:~/project/nats.c-1.8.0/build/arm64$ ls /etc/ld.so.conf.d/
arm64_local_lib.conf  fakeroot-x86_64-linux-gnu.conf  libc.conf  vmware-tools-libraries.conf  x86_64-linux-gnu.conf  zz_i386-biarch-compat.conf  zz_x32-biarch-compat.conf

可以看到很多文件对不对?  这些就是ld在链接过程中会去搜索的配制文件。因为我的库都放在/opt/arm-libs/arm64/lib/
于是:boen@ubuntu:~/project/nats.c-1.8.0/build/arm64$ cat /etc/ld.so.conf.d/arm64_local_lib.conf /opt/arm-libs/arm64/lib
创建arm64_local_lib.conf 这个配制文件,不用管文件名,但扩展名一定要是.conf
然后切记执行一下sudo ldconfig
然后再去编译你的工程,上帝。。。。那烦人的链接错误终于消失了

You may also like...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据