2017-11-16 9 views
0

最新のcygwin64環境で、g ++ 6.4.0を使用してCPPアプリケーション(オープンソースプロジェクト)をコンパイルしようとしましたが、次のエラーが表示されます:CPPアプリケーションのコンパイル中にエラーが発生しました。 "エラー: 'posix_memalign'がこのスコープで宣言されていませんでした。"

error: 'posix_memalign' was not declared in this scope

posix_memlignが最も単純なCPP "hello world"アプリケーションをコンパイルすると、posix_memlignを呼び出す際に問題がないので、posix_memlignがstdlib.hにあります。

プロジェクトレポートのメイクファイルのコンパイル

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)で問題なくコードをビルドすることができました。他の コンパイラは他のビルダーからGCCコンパイラを含め、そうかもしれないが

+0

削除してみてください '-std = C++ 0x'それは提案のための – matzeri

+0

感謝の宣言の有効範囲は減少しますが、完全にずっと以前のビルドを破るように見えますそれは実行可能なオプションではありません – Eden

答えて

0

posix_memalignは、C標準ライブラリまたはC++標準ライブラリ し、それを提供しないcygwinのGCCコンパイラの一部ではありません。

プロジェクトソースを編集しやすいと思われる場合は、代わりにC標準機能aligned_allocを使用することを検討してください。これは、中にC++のコンパイルのために<cstdlib>で提供されてcygwinのG ++ 6.4.0

その後

I do see the function in C:\cygwin64\usr\include\stdlib.h...

あなたはコンパイラが見ることができることを意味しないヘッダファイル での関数宣言を見つけることができるという事実それは前処理後です。同一の ソースヘッダーは、多くのビルダーで使用され、 マクロの作成者の設定に応じて異なる 宣言がコンパイラーに公開されます。この場合、宣言は によってコンパイラから隠蔽されます。つまり、__POSIX_VISIBLE >= 200112はfalseです。 __で始まる識別子は、実装者用に予約されています。 コメントを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. 
+0

私はC:\ cygwin64 \ usr \ include \ stdlib.hの機能を見ていますが、C:\ cygwin64 \ lib \ gcc \ x86_64-pc-cygwin \ 6.4.0 \ include \ C++ \ stdlib.h – Eden

+0

こんにちは。回答を更新するを参照してください。 –

関連する問題