在我的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
会是一个坏主意?)
答案 0 :(得分:1)
这表明我需要为OpenSSL提供armhf二进制文件
正确。
这似乎有点浪费,因为我把它们放在我的BeagleBone上,如果它可以耐心等待我部署它。
您似乎认为共享库在运行时只需要 ,但事实并非如此。
ELF
代表可执行文件和链接格式。在静态链接时非常需要.so
来构造主可执行文件中的各种表,然后加载程序将在运行时使用它来解析从主可执行文件到.so
的引用。
如果您熟悉Win32,可以将.so
视为Win32 .LIB
和.DLL
的组合打包到一个文件中。