我正在尝试在C ++项目中使用libsodium库,并且我很难将静态Libsodium库链接到我创建的共享对象中。该项目正在使用G ++编译,并设置为使用C ++ 11标准。
在阅读了关于将静态库链接到共享对象的各种论坛帖子后,我尝试使用整个存档,它似乎让我更进一步,但仍然无法正确链接。
以下是用于链接的命令:
/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
任何人都可以建议将这个静态库合并到我的共享对象中所需的正确链接器标志吗?
答案 0 :(得分:4)
我遇到了同样的问题。假设你在Ubuntu< 15.04(我的是14.04 LTS),你需要禁用PIE
./configure --disable-pie
然后通常:make
/ make install
等。
现在,您应该能够将静态libsodium.a
与.so
相关联。我从最近关于github issue i raised here