首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >英特尔<math.h>对C <math.h>?

英特尔<math.h>对C <math.h>?
EN

Stack Overflow用户
提问于 2013-11-02 23:09:10
回答 2查看 2.8K关注 0票数 1

我在Linux上有一个C++项目,其中包含了库路径:

代码语言:javascript
复制
/opt/intel/include/

这样我就可以使用某些英特尔库了。但是,我也希望使用标准的C/C++ math.h来调用pow(x,y)

我包括了<math.h>,使用了using namespace::std,然后用pow(x,y)打了个电话。编译器(gcc4.7)抱怨:

/opt/ Intel /include/math.h:27:3: error:#error“此Intel只适用于Intel编译器!”

如何具体说明我指的是C/C++ math.h pow()而不是Intel pow()

EN

回答 2

Stack Overflow用户

发布于 2013-11-02 23:34:38

这就是为什么C++在这类事情中使用名称空间,并且使用更具体的标题名称,这些名称不太可能与其他库发生冲突。

如果您使用#include <cmath> (您应该使用C++软件,而不是<math.h>),则可以通过使用std::pow (...)区分stdlib的实现和Intel的实现。这也是不应用using namespace std;的另一个原因,它可能会使代码看起来更简洁,但是由于stdlib中使用的函数名非常通用,所以经常与其他库发生冲突。

票数 2
EN

Stack Overflow用户

发布于 2013-11-02 23:38:02

在英特尔的#error中,<math.h>似乎相当直白和明显:头部被其他编译器禁止使用,这可能是因为它依赖于其他编译器无法使用的特定扩展(例如内置函数)。如果它确实是<math.h>,那么它将是标准C或C++库的一部分,因此它与编译器绑定在一起,除非它明确地是平台ABI的一部分,但情况似乎并非如此。

看起来你不太想使用英特尔的<math.h>,而只是使用英特尔库中的其他头文件。在这种情况下,下列技术之一可能有效:

  1. 使用另一个用于英特尔头的-I选项指定系统/gcc-I的位置:搜索标头的顺序通常与-I选项出现的顺序相同。
  2. 不要使用-I指令来查找英特尔的头部,而是使用路径名称或相对路径名称(后者与-I选项(例如-I/opt/intel)结合使用)。
  3. 创建一个具有指向/opt/intel/include中的标题/目录的符号链接的自定义目录,并删除您希望从其他地方获取的任何标头。或者,另一种方法是:创建一个指向/opt/intel/include所需的每个标头的符号链接。

由于这个目录似乎不能作为其他编译器的附带目录使用,所以很有可能所有这些都不起作用:与特定编译器一起传送的头文件倾向于特定于该编译器。例如,您还需要链接到相应的Intel库,我不确定Intel编译器和gcc是否使用相同的ABI (不过,在Linux上他们可能使用普通的ABI )。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19747942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档