交叉编译无法链接卷曲和加密

时间:2018-04-05 14:13:42

标签: c++ linux raspberry-pi g++ cross-compiling

我通过sudo apt-get install arm-linux-gnueabihf安装了arm-linux-gnueabihf,我想为Raspberry Pi进行交叉编译。 我的make文件是这样的:

arm-linux-gnueabihf-g++ *.cpp *.h b64.c -o file -lcurl -lcrypto -lpthread -lssl 

发生错误:

/usr/arm-linux-gnueabihf/bin/ld: cannot find -lcurl

/usr/arm-linux-gnueabihf/bin/ld: cannot find -lcrypto

此外,我尝试与-L/usr/lib/x86_64-linux-gnu/libcurl.so关联,但仍然是同样的错误。

此外,我不明白为什么libssl a被链接但其他人没有。

如何将这些库链接到arm-linux-gnueabihf? 谢谢。

1 个答案:

答案 0 :(得分:0)

您无法将x86-64位库与arm-linux-gnueabihd链接 你需要得到gnueabihf curl和crypto库。
一种方法:交叉编译curl和crypto库,使用-L指定gnuaebihf机器的交叉编译libcurl.so和libcrypto.so所在的目录。
另一种方法:将来自raspberrypi的libcurl.so和libcrypto.so复制到您的计算机上,用-L指定它们所在的目录并尝试编译,它应该可以工作。
ssl和pthread是链接的,因为您提供了为gnueabihf体系结构编译的ssl和pthread库。在/ usr / arm- *中查找这些文件,可能在/ usr / arm-linux-gnueabihf / lib中。
通常,对于初学者来说,只需在您的树莓派上编译您的程序(安装了curl和crypto),它将为您省去很多麻烦。

-L/usr/lib/x86_64-linux-gnu/libcurl.so行无效。您没有使用-L命令行指定文件,您指定包含libcurl.so的目录。您还使用gnueabihf编译器指定了具有x86-64体系结构特定库的目录,它们不起作用,它们不兼容,不行。您无法将x86_64-linux-gnu/libcurl.so或任何x86-64库与gnueabihf程序链接 交叉编译的整个想法是为另一个体系结构编译。你不要混合这些架构,因为它们彼此不兼容,就像你不能在你的Rasberry pi上运行x86-64程序一样,并且你不能在你的计算机上运行一个rapberry pi程序。两种体系结构的机器代码彼此不兼容。 编译gnueabihf体系结构的程序时,需要链接gnuabihf库并使用gnuabihf目标文件,并使用将生成gnueabihf特定机器代码的编译器。编译x86-64机器的程序时,需要链接x86-64库并使用x86-86目标文件,并使用将生成x86-64机器代码的编译器。 可能对您来说也是值得的,使用file命令来确定文件类型。您可以运行file /usr/lib/x86_64-linux-gnu/libcurl.so以查看此libcurl.so是x86-64共享对象。