相关疑难解决方法(0)

从Python调用C/C++?

构建Python绑定到C或C++库的最快方法是什么?

(如果这很重要,我正在使用Windows.)

c c++ python

493
推荐指数
16
解决办法
39万
查看次数

python-C++扩展可以获得一个C++对象并调用其成员函数吗?

我正在编写一个python/C++应用程序,它将从python中调用C++扩展中的方法.

说我的C++有一个类:

class A
{
    private:
        int _i;
    public:
        A(int i){_i=i;}
        int get_i(){return _i;}
}

A a=A();
Run Code Online (Sandbox Code Playgroud)

无论如何,python可以a在C++中获取对象并调用其成员函数,即:

import cpp_extension
a=cpp_extension.A()
print a.get_i()
Run Code Online (Sandbox Code Playgroud)

任何对一般阅读的提及也表示赞赏.

c++ python python-extensions

7
推荐指数
2
解决办法
2749
查看次数

使用gcc构建共享库

解决了.请参阅下面的更正(标记为FIXED).

我在使用gcc创建共享库时遇到问题.

我创建了一个小样本项目,它与我正在研究的实际项目的结构非常相似.我在这里将其作为tar.gz存档提供:

http://209.59.216.197/libtest.tar.gz

修复:我在这里提供了固定版本:http :
//209.59.216.197/libtest_fixed.tar.gz

在这个示例项目中,我有一个应用程序(app),它在运行时加载我编写的共享库(libshared.so),并调用共享库定义的函数:function_inside_shared_lib().

反过来,这个共享库使用在静态库(libstatic.a)中定义的函数:function_inside_static_lib().

问题是当我构建共享库时,符号"function_inside_shared_lib"不会被导出.我使用"nm"检查共享库,但符号不在那里.我想知道我用来创建共享库的命令是否正确:

g ++ -g -ggdb -fPIC -rdynamic -I ../static -c shared.cpp -o shared.o
g ++ -g -ggdb -fPIC -rdynamic -shared -L ../static -lstatic -o libshared.so

修复:正确的命令是:

g ++ -g -ggdb -fPIC -rdynamic -I ../ static -c shared.cpp -o shared.o
g ++ -g -ggdb -fPIC -rdynamic -shared -L ../ static -o libshared.so shared.o -lstatic

我使用和不使用-rdynamic以及使用和不使用-fPIC尝试了这些命令.结果总是一样的.

我正在使用Ubuntu 10.04(64位)和g ++版本4.4.3.

完整的示例项目如下.(或者您可以使用我帖子顶部的链接下载档案).

serg @ rodent:〜/ libtest $ ls
app共享静态

以下是三个组成部分:

组件1:定义名为function_inside_static_lib()的函数的静态库.

这包括以下内容:

serg@rodent:~/libtest$ …
Run Code Online (Sandbox Code Playgroud)

c++ gcc shared-libraries

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×3

python ×2

c ×1

gcc ×1

python-extensions ×1

shared-libraries ×1