linux - 无法使用 OpenSSL 1.0.2k 构建 APR-util 1.5.4

标签 linux apache gcc openssl apr

我正在尝试为 Apache 2.2.32 构建 APR-util 1.5.6。

我首先使用以下步骤构建 OpenSSL 1.0.2k:

./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl
make
make test
make install

然后我运行了这些命令:

export LD_LIBRARY_PATH=/usr/local/lib
export LIBS=-ldl

我尝试使用这些命令构建 APR-util:

./configure --with-apr=/usr/local/apr/bin/apr-1-config --with-crypto --with-openssl=/usr/local/ssl

make

配置成功完成,但 make 失败并出现以下错误:

/bin/sh /usr/local/apr/build-1/libtool --silent --mode=link gcc  -g -O2 -pthread      -L/usr/local/ssl/lib -release 1 -module -rpath /usr/local/apr/lib/apr-util-1 -o crypto/apr_crypto_openssl.la crypto/apr_crypto_openssl.lo -L/usr/local/ssl/lib  -lssl -lcrypto
/usr/bin/ld: /usr/local/ssl/lib/libcrypto.a(mem.o): relocation R_X86_64_32S against `.text' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libcrypto.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make[1]: *** [crypto/apr_crypto_openssl.la] Error 1

请指教。谢谢。

最佳答案

I first build OpenSSL 1.0.2k using the following steps:

./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl
make
make test
make install

您在这一步没有构建共享对象,因此对象缺少重定位数据。它最终导致:

/usr/local/ssl/lib/libcrypto.a(mem.o): relocation R_X86_64_32S

像下面这样配置应该可以解决问题。

与共享对象

./config shared --prefix=/usr/local/ssl --openssldir=/usr/local/ssl\

在此配置中,OpenSSL 将构建共享对象。它将为您启用 -fPIC 标志。

没有共享对象

./config -fPIC --prefix=/usr/local/ssl --openssldir=/usr/local/ssl

在此配置中,您没有构建共享对象。您必须启用 -fPIC 标志。


您还应该考虑其他 OpenSSL 配置标志,例如 no-ssl2no-ssl3no-comp。如果您在 64 位 Intel 机器上工作,那么您还应该使用 enable-ec_nistp_64_gcc_128。另见 Compilation and Installation | Options在 OpenSSL wiki 上。

关于linux - 无法使用 OpenSSL 1.0.2k 构建 APR-util 1.5.4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217950/

相关文章:

node.js - 如何在 Linux 上升级 angular-cli? CLI v6 不支持 Node.js V6.14.3

php - Laragon-无法检测到我的 laravel 项目

c++ - std::is_arithmetic 为泛型 lambda 中的 int 类型返回 false:未定义的行为?

gcc - 这个带有输入 = 输出的 gcc 风格的 asm 需要早期的破坏吗?

Linux Kiosk 软件?

c - 将字符串参数从 C 传递到 Fortran 子例程时出现问题

c++ - 使用 VLC imem 从内存中播放 h264 视频文件但收到错误 "main stream error: cannot pre fill buffer"

linux - bash脚本: Apache Server is running or not

apache - 确定 Mahout LDA 输出上的文档 ID

GCC 链接顺序改变了?