我通过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? 谢谢。
答案 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共享对象。