Как перекомпилировать библиотеки ntl и gmp с флагом "-fPIC" и сделать HELib общей библиотекой и неопределенной ссылкой на ошибку func (std :: ostream &) - PullRequest
0 голосов
/ 11 января 2019

the Image for nm -CD /usr/local/lib libfhe.so

код C ++, встроенный в общую библиотеку для HELib, использует статическую библиотеку NTL и GMP. Но он получает следующую ошибку:

/ usr / bin / ld: /usr/local/lib/libntl.a(FFT.o): перемещение R_X86_64_32 против `.rodata.str1.8 'нельзя использовать при создании общего объекта; перекомпилировать с -fPIC
/usr/local/lib/libntl.a: ошибка при добавлении символов: неверное значение collect2: ошибка: ld вернул 1 статус выхода

Это было предложено в сообщении Нажмите здесь

для перекомпиляции NTL и GMP с флагами "-fPIC". Я не могу найти, как мне это сделать.

Редактировать:

Теперь я могу собрать общую библиотеку после: перекомпиляция GMP и NTL: ./configure --enable-shared
для gmp и ./configure SHARED=on

После выполнения установки HELib. Я получаю сообщение об ошибке при запуске кода примеров. Ссылка на Makefile: нажмите, чтобы увидеть makefile

Ошибка:

g ++ -g -O2 -std = c ++ 11 -pthread -DFHE_THREADS -DFHE_BOOT_THREADS -DFHE_DCRT_THREADS -o Test_General_x Test_General.cpp -L / usr / local / lib -lntl -lgmplm /usr/local/lib/libfhe.so: неопределенная ссылка на write_raw_int(std::ostream&, long, long)' /usr/local/lib/libfhe.so: undefined reference to read_raw_ZZ (std :: istream &, NTL :: ZZ &) ' /usr/local/lib/libfhe.so: неопределенная ссылка на void write_raw_vector<long>(std::ostream&, std::vector<long, std::allocator<long> > const&)' /usr/local/lib/libfhe.so: undefined reference to writeEyeCatcher (std :: ostream &, char const *) ' /usr/local/lib/libfhe.so: неопределенная ссылка на write_raw_xdouble(std::ostream&, NTL::xdouble)' /usr/local/lib/libfhe.so: undefined reference to read_ntl_vec_long (std :: istream &, NTL :: Vec &) ' /usr/local/lib/libfhe.so: неопределенная ссылка на void read_raw_vector<long>(std::istream&, std::vector<long, std::allocator<long> >&)' /usr/local/lib/libfhe.so: undefined reference to readEyeCatcher (std :: istream &, char const *) ' /usr/local/lib/libfhe.so: неопределенная ссылка на read_raw_int(std::istream&, long)' /usr/local/lib/libfhe.so: undefined reference to read_raw_xdouble (std :: istream &) ' /usr/local/lib/libfhe.so: неопределенная ссылка на write_raw_ZZ(std::ostream&, NTL::ZZ const&)' /usr/local/lib/libfhe.so: undefined reference to write_ntl_vec_long (std :: ostream &, NTL :: Vec const &, long) ' collect2: error: ld вернул 1 состояние выхода Makefile: 179: рецепт для цели 'Test_General_x' не удался make: *** [Test_General_x] Ошибка 1

1 Ответ

0 голосов
/ 19 января 2019

Марк Глисс предоставил ответ для первых двух частей вопроса. Для третьей части «Неопределенная ошибка ссылки» я бы не скомпилировал и связал x.cpp, содержащий функции, которые вызвали неопределенную ссылку, в мой общая библиотека. поэтому проверьте: nm -CD /usr/local/lib/libfhe.so, чтобы увидеть, перечислены ли эти функции с ссылочным адресом или нет. Если нет, то проверьте, какой код обеспечивает эту функциональность. Свяжите этот код с общей библиотекой.

...