Nie można połączyć biblioteki współdzielonej z obiektu x86-64 z zestawu z powodu PIC

Przenoszę udostępnioną bibliotekę z 32-bitowej na 64-bitową. Składa się z jakiegoś zestawu (napisanego dla NASM), który eksportuje kilka procedur i trochę kodu kleju wyższego poziomu. Buduję na 64-bitowej maszynie Debiana z NASM 2.10.01 i GNU ld 2.22.

Po naprawieniu wszystkich problemów z push / pop (pchanie 32-bitowych części rejestrów oczywiście nie będzie działać w trybie 64-bitowym), mam obiekt do złożenia, ale teraz jestem zatrzymany przez etap łączenia. Oto moje linie poleceń - montaż:

nasm -Ox -dPTC_ARCH=X64 -f elf64 particl.asm -o particlasm.o

Łączenie:

ld -shared -lc -S -melf_x86_64 particlasm.o ptc_highlevel.o -o libparticlasm.so (przełącznik -lc wymusza połączenie standardowej biblioteki C w - Potrzebuję niektórych jego funkcji w kodzie zespołu)

Jednak linker nie powiedzie się z następującym komunikatem:

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`

Wiem, dlaczego PIC jest wymagany w systemach 64-bitowych; Rzecz w tym, że rzeczywiście korzystam z PIC, jak opisano w sekcji 9.2Podręcznik NASM. Jednak wydaje mi się, że NASM w jakiś sposób nie zaznacza mojego kodu jako PIC w tablicy symboli ELF, co powoduje, że linker protestuje i nie mogę znaleźć żadnych powiązanych przełączników lub dyrektyw w wierszu poleceń, aby to naprawić.

Jakieś pomysły?

questionAnswers(1)

yourAnswerToTheQuestion