Boost logo

Boost :

Subject: [boost] Compile boost python extension using IDE on windows
From: Raul Durand (raul.durand_at_[hidden])
Date: 2011-01-12 08:15:20


Hi guys,

I have a extension on Linux that uses boost python with no problems.
Now I want to compile my extension on Windows, so I downloaded the
precompiled boost libraries from:
http://www.boostpro.com/download/boost_1_44_setup.exe

I tried to compile my extension on windows using Visual Studio c++ 2008
express edition.

I followed all the instructions from:
http://boost.cppll.jp/HEAD/libs/python/doc/building.html
to use an IDE to compile my own project and obtain a dll. I included all
sources and libs and turned on RTTI and changed the debug and release builds
to Multi-thread dll debug and Multi-thread dll release.

All compilation process is successful. The problem is during linking appears
*some warnings as*:

1> Creating library C:\My Dropbox\codes\fem\pyfem\Debug\pyfem.lib and
object C:\My Dropbox\codes\fem\pyfem\Debug\pyfem.exp

1>libfembase.obj : warning LNK4217: locally defined symbol
??0str_base_at_detail@python_at_boost@@IAE_at_PBD@Z (protected: __thiscall
boost::python::detail::str_base::str_base(char const *)) imported in
function "public: __thiscall boost::python::str::str(char const *)"
(??0str_at_python@boost@@QAE_at_PBD@Z)

1>libfembase.obj : warning LNK4217: locally defined symbol ??
1str_base_at_detail@python_at_boost@@QAE_at_XZ (public: __thiscall
boost::python::detail::str_base::~str_base(void)) imported in function
"public: __thiscall boost::python::str::~str(void)" (??1str_at_python@boost@
@QAE_at_XZ)

1>libfembase.obj : warning LNK4217: locally defined symbol
?throw_error_already_set_at_python@boost@@YAXXZ (void __cdecl
boost::python::throw_error_already_set(void)) imported in function "int
__cdecl boost::python::len(class boost::python::api::object const &)"
(?len_at_python@boost@@YAHABVobject_at_api@12@@Z)

*and some errors as:*

1>boost_python-vc90-mt-gd-1_44.lib(dict.obj) : error LNK2019: unresolved
external symbol __imp__PyDict_Items referenced in function "public: class
boost::python::list __thiscall
boost::python::detail::dict_base::items(void)const " (?items_at_dict_base
@detail_at_python@boost@@QBE?AVlist_at_34@XZ)

1>boost_python-vc90-mt-gd-1_44.lib(dict.obj) : error LNK2019: unresolved
external symbol __imp__PyDict_Keys referenced in function "public: class
boost::python::list __thiscall
boost::python::detail::dict_base::keys(void)const " (?keys_at_dict_base
@detail_at_python@boost@@QBE?AVlist_at_34@XZ)

1>boost_python-vc90-mt-gd-1_44.lib(dict.obj) : error LNK2019: unresolved
external symbol __imp__PyDict_Update referenced in function "public: void
__thiscall boost::python::detail::dict_base::update(class
boost::python::api::object const &)" (?update_at_dict_base_at_detail@python_at_boost@
@QAEXABVobject_at_api@34@@Z)

1>boost_python-vc90-mt-gd-1_44.lib(dict.obj) : error LNK2019: unresolved
external symbol __imp__PyDict_Values referenced in function "public: class
boost::python::list __thiscall
boost::python::detail::dict_base::values(void)const " (?values_at_dict_base
@detail_at_python@boost@@QBE?AVlist_at_34@XZ)

1>C:\My Dropbox\codes\fem\pyfem\Debug\pyfem.dll : fatal error LNK1120: 133
unresolved externals

1>Build log was saved at "file://c:\My
Dropbox\codes\fem\pyfem\Debug\BuildLog.htm"

1>pyfem - 230 error(s), 56 warning(s)
*#############*

I got the same warnings and errors using bjam.

I have been successful compiling and linking as a static library pyfem.lib
using VS, but it does not work as a python extension even renaming to .pyd.

- What I am missing to obtain the dll for my extension using VS?

- Is it possible to create a boost python extension using VS C++ 2008
express edition?

- I am using Win7 64 bits and Python 2.6 64 bits, so using boost 64 bit
binaries is mandatory?

Thanks.

Raul Durand


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk