c – 编译错误:`’error_category’没有用g 6.3.0命名类型`

c – 编译错误:`’error_category’没有用g 6.3.0命名类型`,第1张

概述我尝试编译这个C / Python库 https://bitbucket.org/fluiddyn/fluidfft 如果安装了mpi4py,它运行良好. 如果未安装mpi4py,则无法编译不使用MPI的代码. 编译Cython文件时出现错误.错误很长,它开始于: In file included from /usr/include/c++/6/bits/ios_base.h:46:0, 我尝试编译这个C / Python库 https://bitbucket.org/fluiddyn/fluidfft

如果安装了mpi4py,它运行良好.

如果未安装mpi4py,则无法编译不使用MPI的代码.

编译Cython文件时出现错误.错误很长,它开始于:

In file included from /usr/include/c++/6/bits/ios_base.h:46:0,from /usr/include/c++/6/ios:42,from /usr/include/c++/6/ostream:38,from /usr/include/c++/6/iostream:39,from src_cpp/base/base_fft.h:10,from fluIDfft/fft2d/fft2d_with_fftw1d.cpp:543:/usr/include/c++/6/system_error:143:31: error: ‘error_category’ does not name a type     error_code(int __v,const error_category& __cat) noexcept                               ^~~~~~~~~~~~~~/usr/include/c++/6/system_error:152:27: error: ‘error_category’ does not name a type     assign(int __v,const error_category& __cat) noexcept                           ^~~~~~~~~~~~~~/usr/include/c++/6/system_error:172:11: error: ‘error_category’ does not name a type     const error_category&           ^~~~~~~~~~~~~~/usr/include/c++/6/system_error:191:11: error: ‘error_category’ does not name a type     const error_category*  _M_cat;[...]

我想这可能是一个C 11问题(http://en.cppreference.com/w/cpp/error/error_category),但我没有看到如何解决问题.

编译命令是

g++ -pthread -fwrapv -O3 -Wall -Wno-unused-result -Wsign-compare -Wno-unused-result -Wsign-compare -fwrapv -O3 -Wall -fPIC -I/home/users/me/opt/miniconda3/include/python3.6m -I/home/users/me/opt/miniconda3/include -Isrc_cy -IfluIDfft/fft2d -IfluIDfft/fft3d -Isrc_cpp/base -Isrc_cpp/3d -Isrc_cpp/2d -Iinclude -I/home/users/me/opt/miniconda3/lib/python3.6/site-packages/numpy/core/include -c fluIDfft/fft2d/fft2d_with_fftw1d.cpp -o build/temp.linux-x86_64-3.6/fluIDfft/fft2d/fft2d_with_fftw1d.o

编辑最小,完整和可验证的示例

感谢Ashwin Vishnu(见https://bitbucket.org/fluiddyn/fluidfft/issues/7/fluidfft-installation-fails-without-mpi4py),我可以发布一个最小的例子

/* test.cpp */#include <Python.h>#include <string.h>#include <stdio.h>#include <cpu.h>#include <sys/time.h>#include <complex>#include <iostream>int main() {  std::cout<<"Hello world";  return 0;}

从fluIDfft目录编译如下:

g++ $(python-config --include) -Iinclude/ test.cpp

如果我们注释掉cpu.h include,就没有错误.

文件cpu.h取自pyfftw代码:https://github.com/pyFFTW/pyFFTW/blob/master/include/cpu.h

解决方法 发生这种情况是因为包flowfft的Cython源文件依赖于 a C++ header file cpu.h,其中以下预处理器行导致了问题:

#if __STDC_VERSION__ >= 199901L  /* "inline" is a keyword */#else# define inline#endif

我的猜测是新编译器严格重新定义保留关键字.根据essay on inline functions的提示,这段代码被替换为:

#if __STDC_VERSION__ >= 199901L  /* "inline" is a keyword */#else# define INliNE#endif#ifndef INliNE# if __GNUC__ && !__GNUC_STDC_INliNE__#  define INliNE static inline# else#  define INliNE inline# endif#endif
总结

以上是内存溢出为你收集整理的c – 编译错误:`’error_category’没有用g 6.3.0命名类型`全部内容,希望文章能够帮你解决c – 编译错误:`’error_category’没有用g 6.3.0命名类型`所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229182.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存