C++17与Python 2.7兼容性问题:register关键字编译警告咨询
解决Python 2.7.13头文件在C++17编译时的
register关键字警告问题 嘿,这个问题我之前帮人处理过——毕竟Python 2.7早就停止维护了,它的头文件自然没跟上C17的标准更新(C17彻底移除了register关键字)。给你几个靠谱的解决办法:
1. 编译时直接禁用对应警告
这是最简单也最推荐的方式,不用动任何文件,只要在编译命令里加个参数忽略-Wregister警告就行。比如用g++编译的话:
g++ -std=c++17 your_source.cpp -I/opt/anaconda/include/python2.7 -Wno-register -o your_executable
要是用CMake管理项目,直接在CMakeLists.txt里加一行:
add_compile_options(-Wno-register)
这样整个项目编译时都会忽略这类警告,完美解决刷屏的问题。
2. 手动修改Python头文件(可选,不推荐长期用)
如果你不嫌麻烦,也可以直接修改unicodeobject.h里的代码:找到所有带register关键字的行,把register删掉就行。比如你示例里的那行:
// 原来的代码 register PyObject *obj, /* Object */ // 修改后 PyObject *obj, /* Object */
但要注意,要是以后更新Anaconda或者Python,这个修改会被覆盖,得重新改一遍,所以只适合临时应急。
3. 降级编译标准到C++14及以下
如果你的项目不需要C17的新特性,那直接用C14编译也是个办法——C14只是弃用了register,不会像C17那样触发大量强制警告,顶多只会有个温和的弃用提示。编译时把-std=c++17改成-std=c++14就行。
内容的提问来源于stack exchange,提问作者mcguip
相关产品推荐
相关产品推荐

