Перекомпилировать с -fPIC - PullRequest
       37

Перекомпилировать с -fPIC

0 голосов
/ 28 февраля 2019

Я пишу эту команду:

gcc drr.c -o drr -pthread -lcdsl -L./../synch_implementations -I./../synch_implementations

И я не могу понять, почему я получаю этот ответ:

usr/bin/ld: ./../synch_implementations/libcdsl.a(cdsl_queue_list.o): relocation R_X86_64_32 against `.rodata' can not be used when making a PIE object; recompile with -fPIC
usr/bin/ld: ./../synch_implementations/libcdsl.a(cdsl_deque_list.o): relocation R_X86_64_32S against symbol `cdsl_deque_list_lock_based_pthread_push_tail' can not be used when making a PIE object; recompile with -fPIC
usr/bin/ld: ./../synch_implementations/libcdsl.a(cdsl_lock.o): relocation R_X86_64_32S against symbol `cdsl_pthread_lock_request' can not be used when making a PIE object; recompile with -fPIC
usr/bin/ld: final link failed: Nonrepresentable section on output
ollect2: error: ld returned 1 exit status

Может кто-нибудь помочь мне понять, что не так?

Примечания:

1) Я использую Ubuntu (через VirtualBox).

2) Я очень неопытен, поэтому, вероятно, это не очень яркий вопрос.

1 Ответ

0 голосов
/ 01 марта 2019

Решение : Когда вы компилируете ./../synch_implementations/libcdsl.a, вам нужно добавить дополнительный флаг "-fPIC", чтобы создать позиционно-независимый код (см. Комментарии выше).

Примечание : Флаг PIC обычно необходим при создании объектного кода библиотеки, поскольку он создает объекты относительно глобальной таблицы смещений (GOT), которая впоследствии позволяет связывать объекты библиотеки с вашим кодом.

...