我一般都是Windows的VS 8和C ++的新手。当我尝试在两个不同的项目中编译VC 8中的Python扩展时,我遇到了一个奇怪的问题(一个是一个非常简单的虚拟测试项目,另一个是一个相当大的项目,我想添加扩展)。
我为两个项目提供了Boost.Python所需的相同include / library目录。它们如下:
包括目录:
图书馆目录:
虚拟项目编译和工作没有问题,另一个项目似乎缺少一个特定的库。 VS 8给出以下错误消息:
Error 3 fatal error LNK1104: cannot open file 'libboost_python-vc80-mt-gdp-1_46_1.lib'
当我构建boost库时,没有生成'libboost_python-vc80-mt-gdp-1_46_1.lib'。
我记得当我没有包含'C:\ boost-python \ boost_1_46_1 \ stage \ lib'时,假项目抱怨缺少'libboost_python-vc80-mt-gd-1_46_1.lib'。但是在我提供了这个库目录后,它编译没有问题。 'libboost_python-vc80-mt-gd-1_46_1.lib'确实存在于该目录中。
所以我很困惑为什么我的其他项目正在寻找gdp而不是像我的虚拟项目那样的gd。代码的python特定部分在两个项目中都是相同的。
这是我正在测试的虚拟代码:
#include <boost/python.hpp>
#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>
using namespace boost::python;
boost::mt19937 gen;
struct World
{
std::string msg;
double mypi;
World(std::string msg): msg(msg) {
gen.seed(std::time(0));
} // added constructor
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
double get() const { return mypi; }
void setter(double mypi) { this->mypi = mypi; }
double getgaussrand() {
boost::normal_distribution<> nd(0.0, 1.0);
boost::variate_generator<boost::mt19937&, boost::normal_distribution<> > var_nor(gen, nd);
return var_nor();
}
};
BOOST_PYTHON_MODULE(test_vs_proj_dll)
{
class_<World>("World", init<std::string>())
.def("greet", &World::greet)
.def("set", &World::set)
.def("getgaussrand", &World::getgaussrand)
.def_readonly("msg", &World::msg)
.def_readwrite("mypi", &World::mypi)
.add_property("rovalue", &World::get)
.add_property("value", &World::get, &World::setter)
;
}
答案 0 :(得分:0)
基于它自己选择的boost库命名,听起来你的大型项目使用STLPort库而不是编译器的本地库而不是你的虚拟项目构建了不同的参数。
-gdp
Library Naming section of the Getting Started on Windows Boost guide有更多信息。