Переадресация проблемы с носом R_X86_64_PC32 общая библиотека
Я использую nasm 64 для компиляции.S в.o и затем создаю общую библиотеку с gcc следующим образом:
nasm -f elf64 source/strlen.S
nasm -f elf64 source/strchr.S
nasm -f elf64 source/memset.S
nasm -f elf64 source/strcspn.S
nasm -f elf64 source/rindex.S
nasm -f elf64 source/strpbrk.S
nasm -f elf64 source/strcmp.S
nasm -f elf64 source/strncmp.S
nasm -f elf64 source/strcasecmp.S
/usr/bin/gcc -shared ./source/strlen.o ./source/strchr.o ./source/memset.o ./source/strcspn.o ./source/rindex.o ./source/strpbrk.o ./source/strcmp.o ./source/strncmp.o ./source/strcasecmp.o -o libasm.so
source / rindex.S вызывает функцию strlen, которая находится в source/strlen.S Строка компиляции выдает ошибку:
/usr/bin/ld: ./source/rindex.o: relocation R_X86_64_PC32 against symbol `strlen' can not be used when making a shared object; recompile with -fPIC
Я мог бы использовать опцию -fPIC с gcc при компиляции.S, но я использую nasm, и я не могу найти эквивалентную опцию.
Кто-нибудь знает, как я могу избежать этой проблемы?
Заранее спасибо.
1 ответ
Вы должны убедиться, что пишете независимый от позиции код. Возможно, вы найдете DELAULT REL и само ключевое слово REL полезным.