内置到 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 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 returned 1 exit status Makefile:179: recipe for target 'Test_General_x' failed make: *** [Test_General_x] Error 1