使用共享动态库进行交叉编译

Cross compiling with shared dynamic libraries

本文关键字:交叉编译 动态 共享      更新时间:2023-10-16

在我的c++项目中,我正在编译和链接一个使用OpenSSL的库。

我需要为我的BeagleBone编译这个项目,默认情况下安装了openssl。我已经在我的开发机器上下载了libssl-dev

因此,如果我在x86_64上为我的开发机器编译,我可以很好地编译项目,但我不能成功地交叉编译:

/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lssl
/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lcrypto

这表明我需要为OpenSSL提供armhf二进制文件,这似乎有点浪费,因为我在BeagleBone上有它们,如果它可以耐心等待,直到我部署它

是唯一的方法围绕这个交叉编译OpenSSL自己吗?然后我需要在哪里安装.so文件(我猜make install将是一个坏主意?)

这表明我需要有OpenSSL的armhf二进制文件

正确的。

这似乎有点浪费,因为我在我的BeagleBone上有它们,如果它能耐心等待,直到我部署它。

你似乎认为共享库在运行时只需要,但事实并非如此。

ELF代表可执行和链接格式。.so在静态链接时非常需要在主可执行文件中构造各种表,然后加载器将在运行时使用这些表来解析从主可执行文件到.so的引用。

如果您熟悉Win32,您可以将.so想象为Win32 .LIB.DLL的组合打包到一个文件中。