【问题标题】:boost exposing classes LNK2019 / module does not define init function提升暴露类 LNK2019 / 模块未定义初始化函数
【发布时间】:2013-05-11 09:30:04
【问题描述】:

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

我正在使用 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 中创建一个对象。 Ofc 我从具有默认构造函数的更简单的示例开始。这是我的代码:

世界.h

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

世界.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

这是一个链接器错误,这太奇怪了,因为我用简单的问候功能检查了三次并将设置与我的项目进行了比较。尝试公开课程时是否可能需要更改某些设置?还是我做错了什么?有什么建议吗?

问候 克里斯

【问题讨论】:

    标签: c++ python boost lnk2019


    【解决方案1】:

    您缺少班级名称:

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

    【讨论】:

      猜你喜欢
      • 2015-03-18
      • 2011-02-02
      • 2016-06-27
      • 2017-07-21
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      相关资源
      最近更新 更多