不能使用包含 math.h 和 g++ 7 (Raspberry PI) 的 C 库
Cannot use C libraries that include math.h with g++ 7 (Raspberry PI)
我已经为Raspberry PI构建了GCC 7.2.0,并使用前缀/usr/local/gcc-7.2.0
安装了它(使用本教程(。每当我尝试编译一个包含 C 库的源代码时,而 C 库又包含math.h
我都会收到奇怪的错误。下面是一个最小示例:
extern "C" {
#include <libavcodec/avcodec.h>
}
int main() {
return 0;
}
注意:这里需要extern "C"
,因为avcodec.h
没有。我确定这不是问题所在,因为我尝试删除它但仍然收到相同的错误。
使用/usr/local/gcc-7.2.0/bin/g++-7.2.0 main.cpp
编译,出现以下错误:
In file included from /usr/local/include/libavutil/common.h:36:0,
from /usr/local/include/libavutil/avutil.h:296,
from /usr/local/include/libavutil/samplefmt.h:24,
from /usr/local/include/libavcodec/avcodec.h:31,
from main.cpp:4:
/usr/local/gcc-7.2.0/include/c++/7.2.0/math.h:65:12: error: ‘constexpr bool std::isinf(double)’ conflicts with a previous declaration
using std::isinf;
^~~~~
In file included from /usr/include/features.h:374:0,
from /usr/include/errno.h:28,
from /usr/local/include/libavcodec/avcodec.h:30,
from main.cpp:4:
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:201:1: note: previous declaration ‘int isinf(double)’
__MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
^
In file included from /usr/local/include/libavutil/common.h:36:0,
from /usr/local/include/libavutil/avutil.h:296,
from /usr/local/include/libavutil/samplefmt.h:24,
from /usr/local/include/libavcodec/avcodec.h:31,
from main.cpp:4:
/usr/local/gcc-7.2.0/include/c++/7.2.0/math.h:66:12: error: ‘constexpr bool std::isnan(double)’ conflicts with a previous declaration
using std::isnan;
^~~~~
In file included from /usr/include/features.h:374:0,
from /usr/include/errno.h:28,
from /usr/local/include/libavcodec/avcodec.h:30,
from main.cpp:4:
/usr/include/arm-linux-gnueabihf/bits/mathcalls.h:234:1: note: previous declaration ‘int isnan(double)’
__MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__));
^
您有全局命名空间冲突,因为 math.h 在全局命名空间中声明 C 名称。
问题出在您的 mathcalls.h
版本中 有一个修补程序可以通过在使用 C++11 或更高版本时有条件地不定义isnan
和isinf
来修复它。这是mathcalls.h的补丁。
相关文章:
- Opencv GStreamer管道在Raspberry Pi 4上不起作用
- Raspberry Pi OpenVG C/C++
- Raspberry Pi Zero W 上的 OpenCV - 浮点异常
- 从Raspberry Pi / Linux上的Python脚本运行和停止C++程序
- 在 c++ 或 python 中生成一个体面的视差图以在 Raspberry Pi 上实现的最佳方法(算法或函数)是什么
- 与Qt交叉编译到Raspberry Pi 3B+通讯录(协议缓冲区)-错误符号查找错误
- 为什么OpenCV在Raspberry Pi 3B+上表现不佳
- 我想使用 I2C 接收从 arduino 到 raspberry pi 的多个数据
- Qt-QML JIT on Raspberry PI Rev. 1
- 在Raspberry Pi上构建时OpenCV错误
- 如何在Raspberry Pi上使用C /libao/alsa通过USB声卡播放音频
- Raspberry Pi 3 ,fann_create_standard not defined
- QT5.10.1交叉编译为Raspberry Pi Zero W使用EGLF而不是XCB
- Windows到Raspberry Pi Zero串行问题
- 仅在交叉编译 Raspberry PI 的 QT 静态时进行 eglfs
- Raspberry Pi Arduino I2C communication
- 用于Raspberry Pi的交叉编译的设置QT
- Raspbian的GraphicsMagick的最后版本(Raspberry Pi 3)
- 不能使用包含 math.h 和 g++ 7 (Raspberry PI) 的 C 库
- 如何使用Raspberry Pi相机作为C ++ OpenCV中的视频输入