Не удается связать разделяемую библиотеку из объекта x86-64 из сборки из-за PIC

Я портирую разделяемую библиотеку из 32-битной в 64-битную. Он состоит из некоторой сборки (написанной для NASM), которая экспортирует несколько процедур и немного кода C высокого уровня. Я строю на 64-битной машине Debian с NASM 2.10.01 и GNU ld 2.22.

Исправив все проблемы push / pop (передача 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 каким-то образом не помечает мой код как PIC в таблице символов ELF, что вызывает протестирование компоновщика, и я не могу найти никаких связанных ключей или директив командной строки в Руководство, чтобы исправить это.

Есть идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос