boost暴露类LNK2019 / module没有定义init函数

时间:2013-05-11 09:30:05

标签: c++ python boost lnk2019

我知道标题中的那些错误并不是什么新鲜事,但是在这个星座中,我有一点相当奇怪,我找不到有帮助的解决方案。所以让我解释一下。

我正在使用boost.python,Visual Studio 2012和开发人员站点的教程。因此,当我最终修复了所有链接器问题和导入时,我得到了第一个教程:

char const* greet()
{
   return "hello, world";
}

#include <boost/python.hpp>
using namespace boost::python;

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}

工作正常。

现在我正在尝试一个类,我可以在python中创建一个对象。我开始使用默认构造函数的简单示例。这是我的代码:

World.h

#pragma once
class World
{
public:
    void greet();
};

World.cpp

#include "World.h"
#include <stdio.h>

void greet(){
    printf("hello");
}


#include <boost\python.hpp>
using namespace boost::python;

BOOST_PYTHON_MODULE(hello)
{
    class_<World>("World")
        .def("greet", &World::greet)
        ;
}

如果我现在尝试构建它,我得到一个LNK2019错误,我之前有简单的greet方法项目错误的链接器或导入。什么让我感到头疼的是我在课堂曝光示例中使用了相同的项目设置(我无法解释为什么我再次遇到链接器错误)。当我尝试通过以下方式公开方法问候时:

def("greet", greet);

在BOOST_PYTHON_MODULE块中,我可以构建它但在python中获取导入错误,例如:

module does not define init function

这很奇怪,这是一个链接器错误,因为我通过简单的greet函数进行了三重检查并将设置与我的项目进行了比较。在尝试公开课时,我是否可能需要更改某些设置?或者我在做一些可怕的错误?有什么建议吗?

问候 克里斯

1 个答案:

答案 0 :(得分:0)

您缺少班级名称:

void World::greet(){
    printf("hello");
}