编译CPP应用程序时出错。 “错误:'posix_memalign'未在此范围内声明”

时间:2017-11-16 15:12:01

标签: c++ c++11 g++ cygwin

我正在尝试使用g ++ 6.4.0在最新的cygwin64环境中编译CPP应用程序(一个开源项目),我收到以下错误:

  

错误:'posix_memalign'未在此范围内声明

现在posix_memlign可以在stdlib.h中找到,如果编译最简单的CPP“hello world”应用程序,调用posix_memlign就不会有问题。

项目的make文件报告以下编译设置

  

g ++ -DHAVE_CONFIG_H -I。 -Wall -Wnon-virtual-dtor -I。 -I./include -g -O3 -std = c ++ 0x -g -O3 -std = c ++ 0x -MT lib / rectangular_binary_matrix.lo -MD -MP -MF lib / .deps / rectangular_binary_matrix.Tpo -c lib / rectangular_binary_matrix.cc -DDLL_EXPORT -DPIC -o lib / .libs / rectangular_binary_matrix.o

所以看起来它不会覆盖默认的包含路径。有任何想法吗?

P.S。 我能够在Linux(Redhat)上构建代码没有问题。

1 个答案:

答案 0 :(得分:0)

posix_memalign不是C标准库或C ++标准的一部分 库和cygwin GCC编译器不提供它,尽管其他 编译器可以这样做,包括来自其他构建器的GCC编译器。

如果您对编辑项目源感到满意,可以考虑使用C标准函数aligned_alloc。它在<cstdlib>中提供,用于cygwin g ++ 6.4.0中的C ++编译

<强>后来

  

我确实在C:\ cygwin64 \ usr \ include \ stdlib.h中看到了这个函数......

您可以在头文件中找到函数声明 并不意味着编译器可以在预处理后看到它。相同 源头可能被许多构建器使用,暴露不同 根据构建器的构建器设置向编译器声明 宏。在这种情况下,声明隐藏在编译器中 事实__POSIX_VISIBLE >= 200112是假的。以__开头的标识符保留给实现者。 查看explanation of this macro 并注意评论:

 * The following private macros are used throughout the headers to control
 * which symbols should be exposed.  They are for internal use only, as
 * indicated by the leading double underscore, and must never be used outside
 * of these headers.