我是从32位移植的共享库到64位。 它是由一些汇编(NASM为书面),其出口几个程序和较高C级胶水代码一点点。 我建立一个64位的Debian机器上NASM 01年2月10日和GNU LD 2.22。
已经修复了所有的推/弹出问题(推寄存器的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`
我知道为什么需要PIC,在64位系统; 事情是,我确实使用PIC作为的第9.2节中描述NASM手册 。 然而,在我看来,NASM不知何故没有标记我的代码作为ELF符号表,这会导致链接抗议PIC,我无法找到任何相关的命令行开关或手册中的指示来解决这个问题。
有任何想法吗?