2014-06-19 64 views
4

我想用boost.pythonpython 3.2+(優選爲3.4)和Visual Studio 2010如何獲取boost.python教程示例以鏈接到Python3?

當我試圖讓反對任何Python3的libs\python\example\tutorial例子(我已經測試過3.0,3.2和3.4),它不鏈接(見下面)。當我把它與2.7連接起來時,它就可以工作

我在兩次嘗試之間做出的唯一更改是在我的主目錄中更新user-config.jam

所以工作user-config.jam是:

# MSVC configuration 
using msvc : 10.0 ; 
# Python configuration: 
using python : 2.7 : C:\\Python27 : C:\\Python27\\include : C:\\Python27\\libs ; 

當我運行bjam我得到:

C:\Boost\boost_1_55_0\libs\python\example\tutorial>bjam 
link.jam: No such file or directory 
...patience... 
...patience... 
...found 1678 targets... 
...updating 8 targets... 
compile-c-c++ bin\msvc-10.0\debug\hello.obj 
hello.cpp 
msvc.link.dll bin\msvc-10.0\debug\hello_ext.pyd 
    Creating library bin\msvc-10.0\debug\hello_ext.lib and object bin\msvc-10.0\debug\hello_ext.exp 
    msvc.manifest.dll bin\msvc-10.0\debug\hello_ext.pyd 
    common.copy boost_python-vc100-gd-1_55.dll 
    ..\..\..\..\bin.v2\libs\python\build\msvc-10.0\debug\boost_python-vc100-gd-1_55.dll 
      1 file(s) copied. 
common.copy hello_ext.pyd 
bin\msvc-10.0\debug\hello_ext.pyd 
      1 file(s) copied. 
capture-output bin\hello.test\msvc-10.0\debug\hello 
      1 file(s) copied. 
**passed** bin\hello.test\msvc-10.0\debug\hello.test 
...updated 8 targets... 

如果我改變user-config.jam到:

# MSVC configuration 
using msvc : 10.0 ; 
# Python configuration: 
using python : 3.4 : C:\\Python34 : C:\\Python34\\include : C:\\Python34\\libs ; 

,並bjam clean,然後bjam我得到:

C:\Boost\boost_1_55_0\libs\python\example\tutorial>bjam 
link.jam: No such file or directory 
...patience... 
...patience... 
...found 1685 targets... 
...updating 9 targets... 
compile-c-c++ bin\msvc-10.0\debug\hello.obj 
hello.cpp 
msvc.link.dll bin\msvc-10.0\debug\hello_ext.pyd 
    Creating library bin\msvc-10.0\debug\hello_ext.lib and object bin\msvc-10.0\debug\hello_ext.exp 
    hello.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) struct _object * __cdecl boost::python::detail::init_module(struct PyModuleDef &,void (__cdecl*)(void))" ([email protected]@[email protected]@@YAPAU[email protected]@[email protected]@[email protected]) referenced in function _PyInit_hello_ext 
    bin\msvc-10.0\debug\hello_ext.pyd : fatal error LNK1120: 1 unresolved externals 

      call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 >nul 
link /NOLOGO /INCREMENTAL:NO /DLL /DEBUG /MACHINE:X86 /MANIFEST /subsystem:console /out:"bin\msvc-10.0\debug\hello_ext.pyd" /IMPLIB:"bin\msvc-10.0\debug\hello_ext.lib" /LIBPATH:"C:\Python34\libs" @"bin\msvc-10.0\debug\hello_ext.pyd.rsp" 
      if %ERRORLEVEL% NEQ 0 EXIT %ERRORLEVEL% 

...failed msvc.link.dll bin\msvc-10.0\debug\hello_ext.pyd bin\msvc-10.0\debug\hello_ext.lib bin\msvc-10.0\debug\hello_ext.pdb bin\msvc-10.0\debug\hello_ext.pdb... 
...removing bin\msvc-10.0\debug\hello_ext.lib 
...removing bin\msvc-10.0\debug\hello_ext.pdb 
common.copy boost_python-vc100-gd-1_55.dll 
..\..\..\..\bin.v2\libs\python\build\msvc-10.0\debug\boost_python-vc100-gd-1_55.dll 
      1 file(s) copied. 
...skipped <p.>hello_ext.pyd for lack of <pbin\msvc-10.0\debug>hello_ext.pyd... 
...failed updating 3 targets... 
...skipped 1 target... 
...updated 2 targets... 

尋找網上我發現一對夫婦此錯誤的引用,但沒有解決辦法... 這裏是最好的鏈接:

http://lists.boost.org/boost-build/2011/06/25147.php

我所看到的很多人在談論使用Python3和boost.python,所以我必須錯過一些東西...... 我是否需要專門爲Python 3編譯boost?

幫助?

/Robert

+0

好的,我在這裏提出了一些問答。希望給你一些指點,至少我們現在正在評論能力!別客氣!我有興趣閱讀更多有用的問題或答案,寫在你身上! –

回答

3

因此,通過試驗和錯誤,我發現了一種可行的方法。

我無法從Python27重新編譯升壓庫Python34 如果我從一個乾淨的區域開始(即新鮮7zipped),並執行以下操作它的工作原理(都在Visual Studio 2010中的命令提示符):

  1. 確保你有一個user-config.jam文件在你的home目錄中包含以下內容:

    # MSVC configuration 
    using msvc : 10.0 ; 
    # Python configuration: 
    using python : 3.4 : C:\\Python34 : C:\\Python34\\include : C:\\Python34\\libs ; 
    
  2. cd C:\Boost\boost_1_55_0

  3. bootstrap
  4. b2 toolset=msvc-10.0 --build-type=complete --with-python --libdir=C:\Boost\lib\i386 install
  5. cd C:\Boost\boost_1_55_0\libs\python\example\tutorial
  6. set lib=c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\LIB;c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\ATLMFC\LIB;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib;C:\Boost\lib\i386;C:\Python34\libs(即增加升壓庫到路徑)
  7. bjam
  8. 修改打招呼。PY到ATT ()周圍打印:

    import hello_ext 
    print(hello_ext.greet()) 
    
  9. python hello.py打印hello, world(這裏注意,蟒蟒3.4.1我的默認安裝)

所以,我還是不知道怎麼解決是如何重新編譯boost和/或如何同時支持兩個python版本。想法和建議是受歡迎的,但目前我只需要Python3,所以我不會調查。

另一件需要注意的事情是,網上發現的預編譯頭文件似乎只有2.7。我希望這些步驟可以幫助別人!