14

GCC 4.7.0(MinGW)を使用してBoost1.49.0をビルドしようとしています。次のエラーメッセージが数十回表示され続けます。

c:\ tools \ mingw \ bin ../ lib / gcc / i686-pc-mingw32 / 4.7.0 / .. / .. / .. / .. / include / c ++ / 4.7.0 / cmath:1096:11 :エラー:'::hypot'は宣言されていません

の1096行目にcmath

using ::hypot;

cmath関数をmath.h次のように宣言するインクルードhypot

extern double __cdecl hypot (double, double); /* in libmoldname.a */

両方のファイルで、上で引用したものの後の数行は、関数の同一のステートメントであり(タイプがの代わりになっていることhypotlを除いて)、それは満足しているようです。long doubledouble

このエラーが発生する理由はありますか?

4

7 に答える 7

17

@Praetorianによる回答は、問題を正しく特定します。一方、Pythonヘッダーは、技術的には他のヘッダーよりも優先されるようになっています。さらに、受け入れられたソリューションが機能しないか、ビルドシステムで不便な場合があるため、別のソリューションを考え出しました。g++の呼び出しに次のフラグを追加します。

-D_hypot=hypot

これにより、Pythonヘッダーの有害なマクロがノーオペレーションになり、コンパイルエラーがなくなります。

于 2015-06-17T02:08:52.967 に答える
14

Found the answer in this forum post. It seems that pyconfig.h has the following lines:

#if defined(__GNUC__) && defined(_WIN32)
// ...
#define hypot _hypot
// ...
#endif /* GNUC */

but cmath included with MinGW expects the function to be named hypot and not _hypot, which causes the compilation errors.

The fix was to include the following to my bjam command line's cxxflags option

bjam ... cxxflags="-include cmath "

This indicates that g++ should include the cmath header at the beginning of every source file.

于 2012-08-25T18:44:52.707 に答える
3

私が見る限り、これはMingWでコンパイルし、-std = c ++ 0xxを使用し、cmathの前にPython.hを含めると発生します。また、cmathは他のかなりの数のヘッダーファイルに含まれていることに注意してください...問題はBoost固有ではないことに注意してください。複雑な事実は、私の標準のMingW-Visual Studioクロスコンパイルセットアップでは、Visual Studio 2010は、他の多くの標準インクルードファイルの前にPython.hをインクルードするためにデバッグモードである必要があるということです。解決策は、最初にcmathを含め、次にPython.hを含めることです。これにより、次のようなコードが得られます。

#include <cmath>
#include <Python.h>
#include < other standard headers >
于 2014-11-22T21:34:47.120 に答える
3

問題は@Praetorianによって正しく識別されます。

私の場合、それは1つのファイルにしか表示されないので、単に追加します

#define _hypot hypot#include <Python.h>

と動作します。

これが啓発になり得ることを願っています。

于 2017-04-20T07:12:08.267 に答える
0

前処理されたユニットを見てみてください。「#undefhypot」のようなものが見つかると思います。

于 2012-05-19T05:59:02.217 に答える
0

リンカーに次のパスを追加すると、コードブロックでこのエラーを解決できました

C:\Python36-32\libs 

リンクライブラリにlibpython36.apython36.libの2つのライブラリを配置します。

于 2018-08-15T19:41:38.213 に答える
-1

この行を追加します

#define _hypot hypot

Python.hPythonインストールディレクトリに保存されているファイルの最初の部分。のようなどこかC:\Python27\include

于 2019-03-27T18:48:29.483 に答える