作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 C++ 项目中使用 libsodium 库,但在将静态 Libsodium 库链接到我创建的共享对象时遇到了困难。该项目正在使用 G++ 编译,并设置为使用 C++11 标准。
在阅读了有关将静态库链接到共享对象的各种论坛帖子后,我尝试使用 Whole Archive,这似乎让我更进一步,但仍然无法正确链接。
以下是用于链接的命令:
/usr/bin/g++ -shared -fPIC -o ./Debug/libwowcrypt.so @"libwowcrypt.txt" -L. -L../SharedLibraries/Sodium/lib -Wl,--whole-archive -lsodium -Wl,--no-whole-archive
从 ld 返回以下错误消息:
/usr/bin/ld: ../SharedLibraries/Sodium/lib/libsodium.a(libsodium_la-hmac_hmacsha256.o): relocation R_X86_64_PC32 against symbol `crypto_auth_hmacsha256_init' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status
任何人都可以建议将此静态库合并到我的共享对象中所需的正确链接器标志吗?
最佳答案
我遇到了同样的问题。假设您使用的是 Ubuntu < 15.04(我的是 14.04 LTS),您需要禁用 PIE
./configure --disable-pie
然后是通常的:make
/make install
等等
现在您应该能够将静态 libsodium.a
链接到您的 .so
。我从最近关于 github issue i raised here 的讨论中得到了这个
关于c++ - 将 libsodium.a 链接到共享对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32165208/
我是一名优秀的程序员,十分优秀!