【发布时间】:2016-11-06 15:49:16
【问题描述】:
我尝试在 x86-64 上创建共享库但失败了。问题归结为以下代码(请不要介意,它没有多大意义):
.section .data
newline:
.ascii "\n"
.section .text
.globl write_newline
.type write_newline, @function
write_newline:
mov $newline, %rax
ret
如下构建:
as minimal.s -o minimal.o
ld -shared minimal.o -o libmin.so
导致以下错误:
ld: minimal.o: relocation R_X86_64_32 against `.data' can not be used when making a shared object; recompile with -fPIC
minimal.o: error adding symbols: Bad value
但是gas不知道选项-fPIC,所以我不能用它重新编译:
as -fPIC minimal.s -o minimal.o
as: unrecognized option '-PIC'
可以做些什么呢?
【问题讨论】:
-
-fpic 将是编译器的一个选项,例如 gcc。如果你在写 asm,你必须自己写图片。
-
@MarcB 这怎么可能?我应该从哪里开始?
-
@ead 对于初学者,请写
mov newline@GOTPCREL(%rip),%rax。检查您的 C 编译器生成的输出,以了解如何编写 PIC。
标签: assembly shared-libraries gnu-assembler