How to Build Using the Boost Python Libraries in V

2019-07-24 16:05发布

问题:

I have built the Boost 1.64.0 Python libraries, using MS Visual Studio Professional 2017 and 32-bit Python 3.4. Now, when I write an application against the resulting library, I'm getting the following link error:

LINK : fatal error LNK1104: cannot open file 'libboost_python-vc141-mt-1_64.lib'

I have looked in the stage/lib directory, and indeed, the library is named libboost_python3-vc141-mt-1_64.lib (note the 3 in the name). I'm assuming the 3 is referencing the fact that the Boost Python library was generated using Python 3. Why is there a naming inconsistency between the library that was built, and the library that my project is attempting to import? Is it simply a missing macro definition in my project configuration?

回答1:

In MSVC builds, the boost headers use MSVC #pragma comments to autolink to the boost libraries, see boost/config/auto_link.hpp.

In addition to including auto_link.hpp, the boost/python/detail/config.hpp file contains:

// Set the name of our library, this will get undef'ed by auto_link.hpp
// once it's done with it:
//
#define BOOST_LIB_NAME boost_python

Which is why MSVC is trying to autolink to libboost_python-vc141-mt-1_64.lib.

Clearly your boost build has built libboost_python3-vc141-mt-1_64.lib instead. As suggested by @kpie, your boost build may have named the python library file depending upon whether it's built for python 3 or python 2...

The answers to this question describes how to build boost for python 3. It may answer your macro question regarding the build.

To fix the issue, you could disable autolinking, or simply rename the library file to remove the "3".