编译本征以在QNX 6上运行

问题描述 投票:0回答:1

我很难让Eigen 3.3.7使用QNX 6.5.0或6.6.0进行编译。当我尝试编译简单的第一个程序示例时,请从Eigen getting started page开始。

#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
  MatrixXd m(2,2);
  m(0,0) = 3;
  m(1,0) = 2.5;
  m(0,1) = -1;
  m(1,1) = m(1,0) + m(0,1);
  std::cout << m << std::endl;
}

编译方式:

qcc -I. test_eigen.cpp

我也收到18个类似的错误:

In file included from ./Eigen/Core:411,
                 from ./Eigen/Dense:1,
                 from test_eigen.cpp:14:
./Eigen/src/Core/arch/CUDA/Half.h: In function 'Eigen::half Eigen::half_impl::exp(const Eigen::half&)':
./Eigen/src/Core/arch/CUDA/Half.h:454: error: '::expf' has not been declared

虽然我可以通过在每个缺少的函数前添加'std'来解决这些错误,但这表明我需要解决一个更大的问题。我感觉有一些冲突的名称空间或预处理器定义。任何帮助将不胜感激。

eigen qnx
1个回答
0
投票

与大多数其他平台不同,QNX 6.x的C ++ stdlib仅将许多cmath函数放在std名称空间中。 This is technically legal according to the C++11 standard,尽管确实使便携性具有挑战性。此外,如果您将标头包括在C中,则QNX仍会将它们放在std名称空间中(即#include <cmath.h>仍公开std :: expf,而不是:: expf)。

Eigen,您已经注意到,明确希望它们在根名称空间中;据我了解,在过去的几年中,并不是所有的C ++ stdlib实现都非常努力地将C库函数放置在std名称空间中。

作为一种解决方法,您可以使用using指令将它们添加到您自己的源文件中的根名称空间中:

#include <cmath>
using std::expf;
#include <Eigen/Dense>
© www.soinside.com 2019 - 2024. All rights reserved.