我正在尝试从 deb 包源(来自流行的半官方nginx 主线 PPA)但链接到openssl 分支包含 ChaCha20 和 Poly1305 附加内容。
我使用 配置了 openssl ./config no-ssl2 no-ssl3 shared -fPIC
(我还设置了CFLAGS="-fPIC"
),它工作正常并成功构建,我可以看到在构建过程中的所有编译步骤中都出现了 。当我使用指向它-fPIC
构建 nginx 包时(我编辑并设置),我收到此错误:dpkg-buildpackage -b
auto/options
OPENSSL=/home/admin/openssl
objs/ngx_modules.o \
-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now -ldl -lpthread -lpthread -lcrypt -lpam -lexpat -lpcre /root/openssl/.openssl/lib/libssl.a
/home/admin/openssl/.openssl/lib/libcrypto.a -ldl -lz -lxml2 -lxslt -lexslt -lgd -lGeoIP \
-Wl,-E /usr/bin/ld: /home/admin/openssl/.openssl/lib/libssl.a(s23_meth.o):
relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/home/admin/openssl/.openssl/lib/libssl.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
自从我用它构建以来,您知道我做错了什么吗-fPIC
?
答案1
我设法让它工作了。事实证明,当以这种方式构建 nginx 时,它不使用预先构建的 openssl 库,而是重新编译它们,此时它缺少我在单独构建中提供的配置选项。我OPENSSL_OPT
在文件中发现了一个属性auto/options
。所以我在那里设置的选项是:
USE_OPENSSL=YES
OPENSSL=/root/openssl
OPENSSL_OPT="no-ssl2 no-ssl3 -fPIC"
设置完这些后,编译成功完成,我就可以安装生成的软件包了。