2

プログラムを Windows 環境と互換性を持たせることにしましたが、Windows でのプログラミング経験はほとんどありません。助けが必要なエラーがいくつかあります。

環境:

  • OS: win7-64bit,
  • ide: codeblocks12.11,
  • python: Python 2.7.3 Windows X86-64 インストーラー (Windows AMD64 / Intel 64 / X86-64 バイナリ [1] -- ソースは含まれません)
  • コンパイラ: codeblocks インストール パッケージからの mingw。
  • ブースト: ブースト1.52

「.\boost_1_52_0\libs\python\example\tutorial」からのこの「hello」コードのみをコピーしてテストします

コード:

#include <iostream>
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>

char const* greet()
{ return "hello, world"; }

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

using namespace std;
int main()
{
    cout << "Hello world!" << endl;
    return 0;
}

エラー情報:

mingw32-g++.exe -Wall -fexceptions  -g  -ID:\boost\include\boost-1_52 -IC:\Python27\include  -c E:\project\snail-MW\test1\main.cpp -o obj\Debug\main.o
mingw32-g++.exe -LD:\boost\lib\ -LC:\Python27\libs  -o bin\Debug\test1.exe obj\Debug\main.o  
obj\Debug\main.o: In function `inithello_ext':
E:/project/snail-MW/test1/main.cpp:11: undefined reference to `boost::python::detail::init_module(char const*, void (*)())'
obj\Debug\main.o: In function `ZNK5boost6python9type_info4nameEv':
D:/boost/include/boost-1_52/boost/python/type_id.hpp:165: undefined reference to `boost::python::detail::gcc_demangle(char const*)'
obj\Debug\main.o: In function `ZNK5boost6python15to_python_valueIRKPKcEclES5_':
D:/boost/include/boost-1_52/boost/python/converter/builtin_converters.hpp:161: undefined reference to `boost::python::converter::do_return_to_python(char const*)'
................

また、ステーション ".\boost_1_52_0\libs\python\example\tutorial" で "bjam toolset=gcc variant=release " のコマンドによってのみコンパイルされるいくつかのエラーも発生しています。

4

2 に答える 2

6

パスを取得しましたが、boost および python ライブラリに対してリンクしていません。

-lboost_python -lpython27

また、実行可能ファイルを作成しようとしています (そのmain()ため、コンパイルするために例に a を追加する必要がありました)。BOOST_PYTHON_MODULE(...)Python モジュールの場合、マクロで定義された名前と一致する共有ライブラリを作成します。これらのモジュールの拡張子は.pyd.

-shared -o hello_ext.pyd

リンカが boost_python ライブラリを見つけられない場合は、boost ライブラリ ディレクトリを確認してください。インストールに応じて、 libboost_python.aまたはが必要libboost_python-mgw??-mt-1_??.aです。そのようなものが見つからない場合は、まずそれらを構築する必要があります。静的ライブラリと共有ライブラリのどちらを構築するかを決定する必要があります。詳細はこちら

c:\boost_1_52> b2 toolset=gcc --with-python

ブーストが Python インストールを見つけられない場合、これは失敗します。python (通常は非標準の場所) を構成するには、user-config.jam. これは、%HOMEDRIVE%%HOMEPATH%またはにある可能性がありますboost_1_52_0\tools\build\v2。そのファイルを見つけPython configurationて、適切なパスを設定します (python がデフォルトの場所にインストールされている場合、この手順は必要ありません)。構文は次のとおりです。

using python : python_version : python_base : python_incl : python_lib ;

例えば:

using python : 2.7 : c:/Python27 : c:/Python27/include : c:/Python27/libs ;

静的なブースト Python ライブラリをビルドすることを選択した場合、プログラムをリンクするときに他のエラーが発生する可能性があります。その場合は、静的ライブラリにリンクすることを次のように示す必要があります。

-DBOOST_PYTHON_STATIC_LIB

::hypot最後に、宣言されていないことについてコンパイラが文句を言うことがあります。これを修正するには#include <cmath>、boost/python ヘッダーを含める前に。

于 2012-12-30T20:30:37.563 に答える
1

Windows 7 の Boost 1_60_0 でチュートリアルを実行するには、64 ビットの mingw gcc (バージョン 4.8.1) を使用して、msys シェルで次のコマンドを使用する必要がありました。

rm -rf bin.v2/libs/python stage/lib/libboost_python-mgw48-*
./b2.exe toolset=gcc define=MS_WIN64 --with-python link=static

boost python ライブラリを作成します。このコマンドは、Boost ルート ディレクトリで実行されます。Python extensions for Win64 via GCC に示されているように、 define=MS_WIN64I get undefined errors on がないことに注意してください。__imp_py_InitModule4

その後、Python ブースト チュートリアルをコンパイルするのは簡単です。

g++ hello.cpp -I /c/projects/boost_1_60_0/ -I /c/prog64/Python27/include -DBOOST_PYTHON_STATIC_LIB  /c/projects/boost_1_60_0/stage/lib/libboost_python-mgw48-mt-1_60.a /c/prog64/Python27/python27.dll -DMS_WIN64 -shared -o hello_ext.pyd

これはBoost 1_54_0でも機能しました

于 2016-01-03T16:06:25.833 に答える