我正在尝试使用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)上构建代码没有问题。
答案 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.