【发布时间】:2016-10-02 08:17:36
【问题描述】:
我一直在 32 位机器上编程,直到最近,我升级到了 64 位机器。我在 xubuntu 16.04 (amd64) 上使用最新版本的 DMD (amd64)。
在升级之前,我可以使用dmd -shared 'FILES' 轻松编译共享库,但现在,它给出了错误。
我有一个名为 q.d 的文件:
module q;
export extern(C) int abcd(){
return 4;
}
现在当我执行dmd -shared 'q.d' 时,我得到了这个:
nafees@OptiPlex-755:~/Desktop/temp$ dmd -shared q.d
/usr/bin/ld: q.o: relocation R_X86_64_32 against `__dmd_personality_v0' can not be used when making a shared object; recompile with -fPIC
q.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
--- errorlevel 1
当我这样做时dmd -shared -fPIC q.d:
nafees@OptiPlex-755:~/Desktop/temp$ dmd -shared -fPIC q.d
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libphobos2.a(exception_224_3b4.o): relocation R_X86_64_32 against `__dmd_personality_v0' can not be used when making a shared object; recompile with -fPIC
/usr/lib/x86_64-linux-gnu/libphobos2.a: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
--- errorlevel 1
如何编译?
编辑:如果我使用 -m32 标志,库编译得很好。
【问题讨论】:
-
可能是因为周围有缓存的东西,你试过
--force吗?另外,我记得在安装hardening-wrapper时遇到了这个问题。删除它为我修复了它。 -
@weltensturm 我试着做
dmd -shared --force q.d,但它说--force是一个无法识别的开关。而且我没有安装 hardening-wrapper。
标签: linux linker-errors d