NASM выдает перемещение общей библиотеки 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 и не могу найти эквивалентную опцию.

Кто-нибудь знает, как я могу избежать этой проблемы?

Заранее спасибо.


person nsvir    schedule 27.03.2014    source источник


Ответы (1)


Вы должны убедиться, что вы пишете позиционно-независимый код. Вы можете найти РЕЛ ПО УМОЛЧАНИЮ и полезно само ключевое слово REL.

person Jester    schedule 27.03.2014