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

时间:2015-09-25 19:47:28

标签: c++ linker cross-compiling dynamic-linking

在我的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会是一个坏主意?)

1 个答案:

答案 0 :(得分:1)

  

这表明我需要为OpenSSL提供armhf二进制文件

正确。

  

这似乎有点浪费,因为我把它们放在我的BeagleBone上,如果它可以耐心等待我部署它。

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

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

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