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?
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".