3

我正在尝试将我的代码与依赖于 libcrypto.so 的共享库(“libX.so”)链接起来。我安装了 libcrypto.so.1.0.0,但它似乎特别需要 libcrypto.so.0.9.8。有没有办法让它链接到 1.0.0?如果不破坏其他软件包,我无法在我的系统(archlinux)上安装 0.9.8。

/usr/bin/ld: warning: libcrypto.so.0.9.8, needed by /usr/local/lib/libX.so, not found (try using -rpath or -rpath-link)
/usr/local/lib/libX.so: undefined reference to `SHA512@OPENSSL_0.9.8'
...

编辑:

我可能应该添加更多信息。我尝试编译 openssl 0.9.8 并安装到前缀 /usr/local。但是即使它似乎找到了这个库,但在构建时仍然存在错误:

/usr/local/lib/libX.so: undefined reference to `SHA512@OPENSSL_0.9.8'
...

libcrypto 似乎确实定义了这一点:

$ nm /usr/local/ssl/lib/libcrypto.so.0.9.8 | grep SHA512
000000000006f9b0 T SHA512
...

我正在使用以下脚本进行编译:

export LD_LIBRARY_PATH+=:/usr/local/ssl/lib
gcc -I/usr/local/include/ test.c -o test -lX

这是 ldd 在 libX 上的输出:

$ ldd /usr/local/lib/libX.so              
/usr/local/lib/libX.so: /usr/local/ssl/lib/libcrypto.so.0.9.8: no version information available (required by /usr/local/lib/libX.so)
libssl.so.0.9.8 => /usr/local/ssl/lib/libssl.so.0.9.8 (0x00007f9c4e329000)
libcrypto.so.0.9.8 => /usr/local/ssl/lib/libcrypto.so.0.9.8 (0x00007f9c4df99000)
...
4

2 回答 2

1

参考http://forums.gentoo.org/viewtopic-t-835256-start-0.html

openssl-0.9.8l-sym-version-felixrabe.patch对我来说工作得很好!

于 2013-06-06T09:00:49.650 回答
0

因为最初的 OpenSSL 库是使用版本脚本构建的。这是一项功能,因此您可以拥有不同版本的库并仍然获得正确的符号。

您可以像这样添加自己的:

OPENSSL_0.9.8 {
 *;
};

然后与 --version-script 链接

要使 OpenSSL 执行此操作,您可能需要编辑 Makefile。

于 2012-11-29T06:48:44.800 回答