Я программировал на 32-битной машине, до недавнего времени я обновлялся до 64-битного. Я использую последнюю версию DMD (amd64), на xubuntu 16.04 (amd64).DMD2 не удается скомпилировать общую библиотеку в Linux, amd64
Перед обновлением я мог легко скомпилировать общие библиотеки с помощью dmd -shared 'FILES'
, но теперь он дает ошибку. У меня есть файл с именем QD:
module q;
export extern(C) int abcd(){
return 4;
}
И теперь, когда я dmd -shared 'q.d'
, я получаю это:
nafees[email protected]:~/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
:
[email protected]:~/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
Как я могу получить его компилировать?
EDIT: библиотека компилируется отлично, если я использую флаг -m32.
Возможно, это связано с тем, что вы использовали кеширование '--force'? Кроме того, я помню, что эта проблема была с установкой «hardening-wrapper». Удаление, которое исправило это для меня. – weltensturm
@weltensturm Я пробовал делать 'dmd -shared -force q.d', но он говорит, что' --force' является непризнанным переключателем. И у меня нет отвердителя. – Nafees