Python呼び出しso/.dll
7463 ワード
python呼び出しsoファイル
GCCコンパイルパラメータ解析-shared:動的接続ライブラリの生成を指定します(コネクタにTタイプの書き出し記号テーブルを生成させ、弱い接続Wタイプの書き出し記号を生成させる場合もある)このフラグを使わないと外部プログラムが接続できない.実行可能ファイル-fPICに相当する:位置独立のコードにコンパイルされていることを示し、このオプションを使わないとコンパイルされたコードは位置関連なので動的にロードされる場合はコードコピーによって異なることを満たすプロセスの必要性は、真のコードセグメント共有の目的を達成することはできません.
1.Cダイナミックリンクライブラリを呼び出す
C言語による単純max関数の作成:
コンパイル生成
Python言語でlibmaxを呼び出す.soリンクライブラリのmax関数
2.C++ダイナミックリンクライブラリを呼び出す
C++による
コンパイル生成libdisplay.so
pythonは生成したlibtestを呼び出す.so
demo.py
実行:
python呼び出しdllファイル
一時的にリンクを記入します
https://blog.csdn.net/zmnbehappy/article/details/78697185
Prefrence
Pythonインスタンスの概要の3 PythonとC/C++の相互呼び出し
GCCコンパイルパラメータ解析-shared:動的接続ライブラリの生成を指定します(コネクタにTタイプの書き出し記号テーブルを生成させ、弱い接続Wタイプの書き出し記号を生成させる場合もある)このフラグを使わないと外部プログラムが接続できない.実行可能ファイル-fPICに相当する:位置独立のコードにコンパイルされていることを示し、このオプションを使わないとコンパイルされたコードは位置関連なので動的にロードされる場合はコードコピーによって異なることを満たすプロセスの必要性は、真のコードセグメント共有の目的を達成することはできません.
1.Cダイナミックリンクライブラリを呼び出す
C言語による単純max関数の作成:
max.c
/*
* # -shared
* # -fPIC(Position Independent Code)
*/
int max(int a,int b)
{
return a>b?a:b;
}
/*
* gcc -Wall -g -fPIC -c max.c -o max.o
* gcc -shared max.o -o max.so
* -g -Wall ,
*
* gcc max.c -fPIC -shared -o max.so
*/
コンパイル生成
libmax.so
gcc -fPIC -shared max.c -o libmax.so
Python言語でlibmaxを呼び出す.soリンクライブラリのmax関数
from ctypes import cdll
cur = cdll.LoadLibrary('./libmax.so')
a = cur.max(1, 2)
print(a)
2.C++ダイナミックリンクライブラリを呼び出す
C++による
display.cpp
の記述class TestLib
{
public:
void display();
void display(int a);
};
void TestLib::display() {
cout<<"First display"<<endl;
}
void TestLib::display(int a) {
cout<<"Second display:"<<a<<endl;
}
//C++ python .so , :
extern "C" {
TestLib obj;
void display() {
obj.display();
}
void display_int(int a) {
obj.display(a);
}
}
コンパイル生成libdisplay.so
g++ -fPIC -shared display.cpp -o libdisplay.so
pythonは生成したlibtestを呼び出す.so
demo.py
import ctypes
so = ctypes.cdll.LoadLibrary
lib = so("./libpycallclass.so")
print('display()')
lib.display()
print('display(100)')
lib.display_int(ctypes.c_int(100))
実行:
python demo.py
python呼び出しdllファイル
一時的にリンクを記入します
https://blog.csdn.net/zmnbehappy/article/details/78697185
Prefrence
Pythonインスタンスの概要の3 PythonとC/C++の相互呼び出し