交叉编译树莓派程序时无法链接libcurl与libcrypto库求助
这问题我碰到过好多次了——交叉编译最容易踩的就是架构不匹配的坑!先给你点破核心问题:你指定的-L/usr/lib/x86_64-linux-gnu完全没用,甚至帮倒忙!因为你用的arm-linux-gnueabihf-g++是给ARM架构(树莓派用的就是ARM)编译程序的工具链,而/usr/lib/x86_64-linux-gnu里的库都是给x86_64架构(你的PC)用的,两者指令集不兼容,工具链根本不会认这些x86库,自然报找不到。
正确的解决步骤
第一步:安装ARM架构的依赖库
你需要安装针对arm-linux-gnueabihf的开发包,也就是树莓派能用的ARM版本libcurl和OpenSSL(包含libcrypto、libssl):sudo apt-get install libcurl4-gnutls-dev:arm-linux-gnueabihf libssl-dev:arm-linux-gnueabihf这里的
:arm-linux-gnueabihf后缀是告诉APT要下载ARM架构的包,而不是你PC用的x86版本。第二步:重新编译
安装完成后,直接用你原来的编译命令就行,不用加额外的-L参数——交叉编译工具链会自动去/usr/arm-linux-gnueabihf/lib等ARM库的默认路径搜索,另外注意:.h头文件不需要写到编译命令里,编译器会自动通过#include找到它们,加进去反而多余。最终命令改成:arm-linux-gnueabihf-g++ *.cpp b64.c -o file -lcurl -lcrypto -lpthread -lssl
关于libssl的疑问
libssl和libcrypto都是OpenSSL库的一部分:libcrypto负责加密算法实现,libssl负责SSL/TLS协议相关的功能。安装libssl-dev:arm-linux-gnueabihf时会自动附带libcrypto的开发文件,所以安装上面的包后,-lcrypto和-lssl的依赖都能解决。
如果还是报错?
可以先检查ARM库是否真的安装成功:
find /usr/arm-linux-gnueabihf -name "libcurl.so" find /usr/arm-linux-gnueabihf -name "libcrypto.so"
如果能找到对应的文件,说明安装没问题,再检查编译命令有没有拼写错误就行。
内容的提问来源于stack exchange,提问作者justsomeoneelse

