Я пытаюсь создать общую библиотеку (*.so) в ASM и не уверен, что делаю это правильно...
Мой код таков:
.section .data
.globl var1
var1:
.quad 0x012345
.section .text
.globl func1
func1:
xor %rax, %rax
# mov var1, %rcx # this is commented
ret
Для компиляции я запускаю
gcc ker.s -g -fPIC -m64 -o ker.o
gcc ker.o -shared -fPIC -m64 -o libker.so
Я могу получить доступ к переменной var1 и вызвать func1 с помощью dlopen() и dlsym() из программы на C.
Проблема в переменной var1. Когда я пытаюсь получить к ней доступ из func1, т.е. раскомментировать эту строку, компилятор выдает ошибку:
/usr/bin/ld: ker.o: relocation R_X86_64_32S against `var1' can not be used when making a shared object; recompile with -fPIC
ker.o: could not read symbols: Bad value
collect2: ld returned 1 exit status
Я не понимаю. Я уже компилировал с -fPIC, так в чем дело?