--with-python --toolset=msvc --build-type=complete
通过b2
构建库。结果我有以下文件:
- boost_python3-vc120-mt-1_64.dll
- boost_python3-vc120-mt-1_64.lib
- boost_python3-vc120-mt-gd-1_64.dll
- boost_python3-vc120-mt-gd-1_64.lib
- libboost_python3-vc120-mt-1_64.lib
- libboost_python3-vc120-mt-gd-1_64.lib
- libboost_python3-vc120-mt-s-1_64.lib
- libboost_python3-vc120-mt-sgd-1_64.lib
- libboost_python3-vc120-s-1_64.lib
- libboost_python3-vc120-sgd-1_64.lib
然后我在Visual Studio中创建了一个项目(类型:Win32 / DLL),使用了这里的以下代码:
char const* greet()
{
return "hello, world";
}
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(hello)
{
using namespace boost::python;
def("greet", greet);
}
在C/C++设置的项目属性中,我添加了“附加包含目录”到Boost和Python的位置(以\ Python36 \ include结尾)。
在第一次尝试构建项目时出现错误:
错误1 error LNK1104:无法打开文件'python36.lib'
因此,在链接器设置的项目属性中,“附加库目录”,我添加了相应的位置(以\ Python \ Python36 \ libs结尾)。之后我可以继续...到下一个错误:
错误1 error LNK1104:无法打开文件'boost_python-vc120-mt-gd-1_64.lib'
值得注意的是,我拥有的文件名与VS2013寻找的文件名之间的区别仅是单词python之后的数字3。
在stackoverflow和google groups上讨论了类似的问题,但没有提供有价值的技巧。唯一有用的信息是库文件名*boost_python-*
对应Python 2,*boost_python3-*
对应Python 3。
我注意到将构建类型(解决方案配置)从Debug更改为Release会导致库文件名称的一部分中的错误消息发生变化(现在没有`-gd-`):
错误1 错误 LNK1104: 无法打开文件“boost_python-vc120-mt-1_64.lib”
我猜想,VS2013知道Boost库的文件名约定,但可能不知道Python 2和Python 3之间的区别。
所以,我有三个问题:
- 是否有可能影响VS查找Boost.Python库时使用的逻辑?(当然,重命名lib文件也是一种选择,但出于某些原因,我不喜欢这样做)
- 链接器选项是否允许直接指定lib文件?(例如,在“附加库目录”部分中,我可以编写整个路径到
boost_python3-vc120-mt-1_64.lib
,包括文件名,而不仅仅是文件夹名称) - 项目属性中的哪个选项应该使VS2013使用不同的LIB或DLL文件,例如
libboost_python3-vc120-mt-1_64.lib
或boost_python3-vc120-mt-1_64.dll
,而不是boost_python-vc120-mt-1_64.lib
?