0

nm -CD /usr/local/lib libfhe.so 的映像

内置到 HELib 共享库中的 C++ 代码使用 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 退出状态

在帖子中建议单击此处

使用“-fPIC”标志重新编译 NTL 和 GMP。我无法找到我应该如何做到这一点。

编辑:

我现在可以构建共享库了:重新编译 GMP 和 NTL: ./configure --enable-shared
for 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 -lgmp -lm -lfhe /usr/local/lib/libfhe .so:未定义对write_raw_int(std::ostream&, long, long)' /usr/local/lib/libfhe.so: undefined reference toread_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 towriteEyeCatcher(std::ostream&, char const*)' /usr/local/ 的引用lib/libfhe.so: 未定义对write_raw_xdouble(std::ostream&, NTL::xdouble)' /usr/local/lib/libfhe.so: undefined reference toread_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 toreadEyeCatcher(std::istream&, char const*)' /usr 的引用/local/lib/libfhe.so:未定义对read_raw_int(std::istream&, long)' /usr/local/lib/libfhe.so: undefined reference toread_raw_xdouble(std::istream&)' 的引用 /usr/local/lib/libfhe.so:未定义引用write_raw_ZZ(std::ostream&, NTL::ZZ const&)' /usr/local/lib/libfhe.so: undefined reference towrite_ntl_vec_long(std::ostream&, NTL::Vec const&, long)' collect2: error: ld returned 1 exit status Makefile:179: recipe for target 'Test_General_x' failed make: *** [Test_General_x] Error 1

4

1 回答 1

0

Marc Glisse 为问题的前两部分提供了答案。对于第三部分“未定义的引用错误”,答案是我没有编译并将包含导致未定义引用的函数的 x.cpp 链接到我的共享库中。因此检查: nm -CD /usr/local/lib/libfhe.so 以查看这些函数是否与链接地址一起列出。如果没有,请检查哪些代码提供了此功能。将该代码链接到共享库。

于 2019-01-19T11:34:14.730 回答