作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在构建一个共享库(我们称之为“foo”),它使用另一个库(我们称之为“bar”)。 “bar”利用了 OpenSSL 的一些功能。
这就是问题出现的地方。
“bar”被编译为一个静态库,看起来 OpenSSL 也是如此。所以当我链接库(“foo”)时,我包括:
libbar.a
libcrypto.a
和 libssl.a
g++ -Wl,-soname,libfoo.so -shared file1.o file2.o libbar.a \
libcrypto.a libssl.a -o libfoo.so
ld: ./obj/libbar.a(file1.c.o): in function initialize_openssl:
ssl.c:117: error: undefined reference to 'SSL_library_init'
nm libssl.a | grep SSL_library_init
00000000 T SSL_library_init
export cross=arm-linux-androideabi-
./Configure android --prefix=~/openssl-arm
make CC="${cross}gcc" AR="${cross}ar r" RANLIB="${cross}ranlib"
最佳答案
问题是由链接命令中库的顺序引起的。切换libcrypto.a
的顺序和 libssl.a
解析了所有的符号。
GCC 使用 LD
默认情况下,它是一个单通链接器。当您有两个库时,例如 libssl
和 libcrypto
以特定顺序链接,这意味着 libssl
取决于来自 libcrypto
的符号.因此,libssl
必须先于 libcrypto
(或 libcrypto
必须遵循 libssl
)。应该不足为奇 libssl
依赖 libcrypto
自 libcrypto
提供 libssl
使用的加密货币.
关于gcc - 指的是一堆明显存在的未解析 OpenSSL 符号的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318978/
我是一名优秀的程序员,十分优秀!