编译GitHub上的TinyMT遇-Wdeprecated-copy警告及链接错误求助
问题1:解决
-Wdeprecated-copy警告 这个警告是GCC 11+的特性,当类存在用户声明的析构函数、拷贝构造函数等,但未显式声明拷贝赋值运算符时,编译器会认为隐式生成的拷贝赋值逻辑可能不符合预期,从而触发警告。
解决方式二选一:
- 显式默认拷贝赋值运算符:找到
tinyMT32类的头文件定义,在类内部添加代码:
若类中存在用户声明的拷贝构造函数,建议同时显式默认拷贝构造,避免后续同类警告:constexpr tinymt32& operator=(const tinymt32&) = default;constexpr tinymt32(const tinymt32&) = default; - 编译时禁用该警告:在编译命令或Makefile的
CXXFLAGS中添加-Wno-deprecated-copy参数,跳过该警告检查。
问题2:解决链接阶段找不到
-lntl库的问题 对应解决方法
- 指定库搜索路径:手动安装的NTL库通常不在Cygwin默认搜索路径中,在链接命令或Makefile的
LDFLAGS中添加-L/path/to/ntl/lib(替换为你的NTL库实际安装路径,比如/usr/local/lib)。 - 确认库文件存在:用以下命令查找系统中的NTL库:
如果找到带版本后缀的库(如find /usr/local -name "libntl*"libntl.so.11),可创建软链接指向标准名称,或直接在链接时指定具体库名(如-lntl.11)。 - 补充依赖库:NTL依赖GMP库,确保链接时同时添加
-lgmp参数,且GMP库路径已正确指定。 - 重新确认安装:手动编译安装NTL的话,重新执行
make install确保库文件和头文件安装完整;用Cygwin包管理器的话,确认已安装libntl-devel开发包(若该包存在)。
内容的提问来源于stack exchange,提问作者Takehisa Iwakoshi
相关产品推荐
相关产品推荐

