无法从程序集中的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