gcc: не в состоянии создать .so из объектных файлов - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь создать динамическую библиотеку .so из файлов * .o и сталкиваюсь с проблемой ниже.

LOG:

[nptemp-static]$ gcc -shared *.o -o libexample.so

/usr/bin/ld: bindings_hubbub_parser.o: relocation R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC
bindings_hubbub_parser.o: could not read symbols: Bad value
collect2: ld returned 1 exit status

Есть идеи? Нужно ли перекомпилировать весь исходный код с указанным параметром?

На самом деле, мне неизвестен исходный код, который я скомпилировал, потому что весь исходный код является открытым исходным кодом, который я скачал и скомпилировал, следуя инструкциям в README.

1 Ответ

0 голосов
/ 30 апреля 2018

Я пытаюсь создать динамическую библиотеку .so из файлов * .o и сталкиваюсь с проблемой ниже.

Это не так просто. На практике вы должны скомпилировать , в частности , при создании общей библиотеки , по крайней мере, в Linux.

(Возможно, вам может понадобиться отредактировать Makefile или как-то настроить свою автоматизацию сборки , если она не предназначена для создания общей библиотеки; если создается какая-то свободное программное обеспечение * библиотека 1018 *, вы можете обратиться за помощью к ее авторам или сообществу)

Общие библиотеки хотят иметь независимый от позиции код . Поэтому вам нужно скомпилировать их исходный код с флагом -fPIC, переданным g++ или gcc (см. this ). Вы также можете явно указать rpath .

Прочитать статью Дреппера: Как писать общие библиотеки .

...