我正在编写一个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)
任何对一般阅读的提及也表示赞赏.
解决了.请参阅下面的更正(标记为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()的函数的静态库.
这包括以下内容:
Run Code Online (Sandbox Code Playgroud)serg@rodent:~/libtest$ …