首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Eclipse中组合C++方法和从python调用C++方法的问题

问在Eclipse中组合C++方法和从python调用C++方法的问题
EN

Stack Overflow用户
提问于 2015-09-02 06:37:03
回答 1查看 212关注 0票数 3

我想要在一个名为foo.cpp的文件中与之对话的简单C++示例类

代码语言:javascript
复制
#include <iostream>

由于ctype只能与C函数对话,因此您需要提供那些将它们声明为外部"C“的函数。

代码语言:javascript
复制
extern "C" {
    Foo* Foo_new(){ return new Foo(); }
    void Foo_bar(Foo* foo){ foo->bar(); }
}

class Foo{
    public:
        void bar(){
            std::cout << "Hello" << std::endl;
        }
};

将此代码编译为共享库

代码语言:javascript
复制
g++ -c -fPIC foo.cpp -o foo.o
g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o

最后,我编写了python包装器。

从ctype import cdll lib = cdll.LoadLibrary('./libfoo.so')

代码语言:javascript
复制
class Foo(object):
      def __init__(self):
          self.obj = lib.Foo_new()

      def bar(self):
          lib.Foo_bar(self.obj)
f = Foo()
f.bar() #prints "Hello" on the screen

“我的主要意图是在eclipse中编译C++代码,并在Linux中调用python中的C++函数”。当我在Linux中编译C++代码并从Linux中的python调用C++方法时,这个方法工作得很好。但是,如果我在eclipse中编译C++代码,并在Linux中调用python中的C++方法,它就不能工作。

代码语言:javascript
复制
Error message:

symbol not found

我是eclipse工具链的新手,但是我给出了编译器选项和链接选项,如下所示

g++ -c -fPIC foo.cpp -o foo.o g++ -shared -Wl,-soname,libfoo.so -o libfoo.so foo.o

将非常感谢eclipse编译器选项和链接选项快照。请帮我解决这个问题。提前感谢

EN

回答 1

Stack Overflow用户

发布于 2015-09-12 21:33:10

您需要在Eclipse中创建两个项目。

使用现有代码的

  1. 生成文件项目。(Makefile文件->新建->使用现有代码的项目)。在此项目中,您必须指向foo.cpp文件。然后,您必须在项目文件夹中创建名为"Makefile“的文件。Makefile必须包含以下行:

全部:

g++ -c -fPIC foo.cpp -o foo.o

g++ -shared -W1,-soname,libfoo.so -o libfoo.so foo.o

干净:

rm -f libfoo.so

然后,您必须在"Make Target“窗口中为该项目创建规则("all”和"clean")。如果你没有看到这个窗口,你必须执行 window ->Show view->Make Target。因此,当双击"Make target“视图中的"all”规则时,您可以使用Eclipse创建libfoo.so文件。

  1. 此时您可以使用foo.py文件创建PyDev项目。如果你不知道PyDev,你一定要去this site。它是python语言的Eclipse插件。当您安装了这个插件后,您将能够在Eclipse下使用您的python文件。

请看一些图片。

​

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32341947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档