openssl - 如何针对静态 OpenSSL 库编译应用程序?
问题描述
我有一个应用程序,我想静态链接到 OpenSSL 库(因为操作系统提供的版本太旧了)。
我已经为这个设备构建了 OpenSSL 库(它是一个旧的 ARM 嵌入式设备),并且链接到.so
文件工作正常:
~$ /usr/local/arm-linux/bin/arm-linux-gcc «my own objects» -ldl -lresolv -lsms -lssl -Wall -o «binary»
现在,我想针对.a
文件进行构建,但我似乎没有得到正确的命令。我得到的最好的是:
~$ /usr/local/arm-linux/bin/arm-linux-gcc «my own objects» -ldl -lresolv -lsms -Wall /usr/local/arm-linux/lib/libssl.a /usr/local/arm-linux/lib/libcrypto.a -o «binary»
但是,这给出了以下未找到的参考:
digest.o(.text+0x48): In function `digest_get_hash':
: undefined reference to `OPENSSL_init_crypto'
digest.o(.text+0x78): In function `digest_get_hash':
: undefined reference to `EVP_MD_CTX_new'
digest.o(.text+0xf4): In function `digest_get_hash':
: undefined reference to `EVP_MD_CTX_free'
ssl.o(.text+0x1c): In function `_ssl_initialise_context':
: undefined reference to `OPENSSL_init_crypto'
ssl.o(.text+0x2c): In function `_ssl_initialise_context':
: undefined reference to `OPENSSL_init_ssl'
ssl.o(.text+0x30): In function `_ssl_initialise_context':
: undefined reference to `TLS_client_method'
ssl.o(.text+0xc0): In function `ssl_init':
: undefined reference to `OPENSSL_init_ssl'
collect2: ld returned 1 exit status
不同的命令,在其中我更改了顺序,或者明显省略libcrypto.a
或libssl.a
产生不同的结果(所有未定义的引用)。
如何静态链接 OpenSSL.a
库?
更新当我.a
使用解压缩文件ar x «library.a»
并链接到生成的.o
文件时,构建成功。
更新这是输出gcc -v
:
[bf@localhost src]$ /usr/local/arm-linux/bin/arm-linux-gcc -v
Reading specs from /usr/local/arm-linux/bin/../lib/gcc-lib/arm-linux/3.3.2/specs
Configured with: ../configure --target=arm-linux --disable-shared --with-headers=/home/gerg/new-wave.xscale/linux-2.4.x/include --with-gnu-as --with-gnu-ld --enable-multilib
Thread model: posix
gcc version 3.3.2
解决方案
推荐阅读
- reactjs - 是的,对具有相同名称的两个输入字段进行验证
- django - Django迁移:`AlterUniqueTogether`因`约束不存在`而失败,但我认为它在那里
- sql - 报表生成器 - 3 个参数集中在一个查询中。前向依赖无效
- hibernate - spring-data-jpa-datatables:忽略 Hibernate @Where 注释
- sql - Azure Synapse Web 门户与 Azure Data Studio 的性能
- angular - 如何根据 Angular 中的下拉选择和函数返回设置输入值
- r - R:连接变量名并使用它
- kendo-grid - 剑道网格角度未加载超过 1000 条记录
- python - 多处理 initargs - 它是如何在幕后工作的?
- yocto - 在 yocto 中启用 strongswan 的 swanctl 插件