在Compling C+中的问题+;方法并调用C++;来自python的方法 简单的C++示例类,我想在一个名为Fo.CPP 的文件中进行讨论 #include <iostream>

在Compling C+中的问题+;方法并调用C++;来自python的方法 简单的C++示例类,我想在一个名为Fo.CPP 的文件中进行讨论 #include <iostream>,python,c++,linux,eclipse,shared-objects,Python,C++,Linux,Eclipse,Shared Objects,最后,我编写了python包装器 从ctypes导入cdll lib=cdll.LoadLibrary('./libfoo.so') “我的主要意图是在Eclipse中编译C++代码,并从Linux中的Python调用C++函数”。当我在Linux编译C++代码时,这种方法很好,在Linux中用Python调用C++方法。但是如果我在Eclipse中编译C++代码,并且在Linux中从Python调用C++方法,那就不管用了。p> Error message: symbol not found

最后,我编写了python包装器

从ctypes导入cdll lib=cdll.LoadLibrary('./libfoo.so')

<>“我的主要意图是在Eclipse中编译C++代码,并从Linux中的Python调用C++函数”。当我在Linux编译C++代码时,这种方法很好,在Linux中用Python调用C++方法。但是如果我在Eclipse中编译C++代码,并且在Linux中从Python调用C++方法,那就不管用了。p>
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编译器选项和链接选项的快照将受到高度赞赏。请帮我整理一下这个问题。提前感谢

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

  • 使用现有代码生成文件项目。(文件->新建->使用现有代码生成文件项目)。在此项目中,必须指向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

  • 然后必须在“生成目标”窗口中为此项目创建规则(“全部”和“清除”)。如果没有看到此窗口,则必须执行窗口->显示视图->生成目标。因此,当双击“maketarget”视图中的“all”规则时,可以使用Eclipse创建libfoo.so文件

  • 此时,您可以使用foo.py文件创建PyDev项目。如果你不知道PyDev,你必须去。它是python语言的Eclipse插件。当你安装了这个插件后,你就可以在Eclipse下使用你的python文件了 看一些图片。

    它没有说缺少哪个符号?你在哪一行得到错误?F= FoeWORE()行,或者F.Bar()行?可能有点偏离主题:如果你想从Python调用C++函数,你可以查看SWIG()。当安装正确时,您可以从头文件自动生成Python包装器。您能从上面的问题陈述中解释一下我是如何做到这一点的吗?我想从Eclipse编译C++代码。你能告诉我安装的是哪一个编译器吗?我如何选择它?错误:程序“使”在路径CPPDEV中没有找到,你能帮我解决这个问题吗?你使用的Linux版本是什么?????您需要安装“make”实用程序。如果您有apt-get实用程序,则需要在控制台中输入“apt-get-install-make”。我的编译器版本稍后会告诉你。非常感谢!!我遇到了另一个问题。文件“cppPython.py”,第2行,在lib=cdll.LoadLibrary('libfoo.so')文件/usr/lib64/python2.6/ctypes/__init__.py),第431行,在LoadLibrary返回self中。_dlltype(名称)文件/usr/lib64/python2.6/ctypes/__init__.py,第353行,在init self。请帮我解决这个问题。我将在明天结束前增加50+个。谢谢你advance@Sandy……您需要将对象文件编译为64位且位置独立,然后使用64位选项将对象文件链接到共享库。。。。。。。。。。。。。。。。。。。。。。。g++-c-fPIC-m64 foo.cpp-o foo.o g++-m64-shared-Wl,-soname,libfoo.so-o libfoo.so foo.o
    g++ -c -fPIC foo.cpp -o foo.o
    g++ -shared -Wl,-soname,libfoo.so -o libfoo.so  foo.o
    
    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
    
    Error message:
    
    symbol not found