無法從程序集中的x86-64對象鏈接共享庫我將一個共享庫從32位移植到64位。它由一些程序集(爲NASM編寫)組成,可以導出多個程序和一些較高級別的C代碼。我使用的是NASM 2.10.01和GNU ld 2.22的64位Debian機器。由於PIC(NASM)
修正了所有的推/拉問題(推送32位寄存器顯然不能在64位模式下工作),我有組裝對象,但現在我被連接暫停階段。這是我的命令行 - 組件:
nasm -Ox -dPTC_ARCH=X64 -f elf64 particl.asm -o particlasm.o
鏈接:
ld -shared -lc -S -melf_x86_64 particlasm.o ptc_highlevel.o -o libparticlasm.so
(該-lc開關強制在連接標準C庫 - 我需要在裝配代碼它的一些功能)
但是,鏈接失敗,並顯示以下消息:
ld: particlasm.o: relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC
particlasm.o: could not read symbols: Bad value`
我知道爲什麼在64位系統上需要PIC;事情是,我的確在按照NASM manual的第9.2節所述使用PIC。然而,在我看來,NASM在某種程度上不會將我的代碼標記爲ELF符號表中的PIC,這會導致鏈接器發生抗議,我在 手冊中找不到任何相關的命令行開關或指令來解決此問題。
任何想法?
我有,除了生成絕對地址不能相對RIP的一打警告,它不會幫助鏈接器的問題... – IneQuation 2012-08-12 08:10:25