저는 32 비트 머신에서 프로그래밍 했었습니다. 최근까지 64 비트로 업그레이드했습니다. xubuntu 16.04 (amd64)에서 최신 버전의 DMD (amd64)를 사용하고 있습니다.DMD2가 Linux에서 공유 라이브러리를 컴파일하지 못했습니다. amd64
업그레이드하기 전에 dmd -shared 'FILES'
을 사용하여 쉽게 공유 라이브러리를 컴파일 할 수 있었지만 이제는 오류가 발생합니다. 나는라는 이름의 파일 QD 있습니다
module q;
export extern(C) int abcd(){
return 4;
}
와 지금은 dmd -shared 'q.d'
을 수행 할 때,이 얻을 :
[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
을 어떻게 얻을 수 있습니다 그것은 컴파일?
편집 : -m32 플래그를 사용하면 라이브러리가 잘 컴파일됩니다.
캐시 된 항목이 있기 때문에 시도했을 수 있습니다. '- 힘'? 또한,'hardening-wrapper'가 설치된 이슈를 기억하고 있습니다. 그것을 제거하는 것은 저를 위해 그것을 고쳤다. – weltensturm
@weltensturm'dmd -shared --force q.d'를 시도했지만'--force'는 인식 할 수없는 스위치라고합니다. 그리고 난 경화 포장지가 설치되어 있지 않습니다. – Nafees