Ubuntu の Python で C/C++ メソッドを呼び出すダイナミック リンク ライブラリの詳細な説明

Ubuntu の Python で C/C++ メソッドを呼び出すダイナミック リンク ライブラリの詳細な説明

ブーストをインストール

Python から C/C++ を呼び出す方法はたくさんあります。この記事では boost.python を使用します。後期に boost の開発作業が多くなることを考慮して、 boost も一緒にインストールします。 boost ライブラリは 2 つの部分に分かれて使用されます。1 つは対応するヘッダーファイルを直接使用する方法で、もう 1 つは対応するライブラリをコンパイルしてインストールしてから使用できるようにします。

具体的なインストール方法については、https://www.jb51.net/article/150380.htm を参照してください。

ここでは以下を使用します:

sudo apt-get で libboost-all-dev をインストールします

サーバ

シリアル化後に送信

メイン.cpp:

#include <iostream>
#include "libUO.h"
 
int メイン()
{
 UO_C_ソケットt;
// t.StartSocketServer("",4121);
 boost::thread t1(boost::bind(&UO_C_Socket::StartSocketServer,&t,"",4121));
 睡眠(2);
// boost::thread t2(boost::bind(&UO_C_Socket::StartSocketClient,&t,"127.0.0.1",4121));
 
 
// t2.join();
 t1.結合();
 0を返します。
}

クライアント

クライアントは、UO_BaseFun.h に基本関数を実装し、それらをカプセル化して、boost_python を通じてエクスポートします。 BOOST_PYTHON_MODULE 内の名前は、最終的な make によって生成された so ファイルと一致する必要があることに注意してください。

同じ名前、そうでない場合はエラーが発生し、エラー名は忘れられます

UO_libdll_py_wrap.cpp:

#include <boost/python.hpp>
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include "UO_BaseFun.h"
 
 
BOOST_PYTHON_MODULE(UO_BaseFun) //Pythonモジュール{
 // boost::python::class_<UO_C_Socket,boost::noncopyable>("UO_C_Socket")
 boost::python::class_<UO_C_Socket>("UO_C_Socket")
 .def("StartSocketClient",&UO_C_Socket::StartSocketClient)
 // .def("getname",&student::getname)
 // .def("setage",&student::setage)
 // .def("getage",&student::getage)
 // .add_property("名前",&student::getname,&student::setname)
 // .add_property("年齢",&student::getage,&student::setage)
 ;
}

Makefile でのコンパイルと接続の違いに特に注意してください。未定義のシンボル エラーが発生した場合は、-lboost_filesystem などのダイナミック リンク ライブラリを追加する必要があります。エラーが発生しました: pyconfig.h が見つからないため、含める必要があります

-I/usr/include/python2.7 です。 makeが完了すると、UO_BaseFun.soファイルが生成されます。

メイクファイル:

UO_BaseFun.so:UO_libdll_py_wrap.o
 g++ UO_libdll_py_wrap.o -o UO_BaseFun.so -shared -fPIC -L/usr/lib/x86_64-linux-gnu\
 -lboost_ファイルシステム -lboost_スレッド -lboost_シリアル化 -lboost_python -lboost_システム
 
 
UO_STR.o:
 g++ -c UO_STR.h -o UO_STR.o -I/usr/include/boost \
 # -lboost_シリアライゼーション 
 
UO_BaseFun.o:UO_STR.o
 g++ -c UO_BaseFun.h -o UO_BaseFun.o -I/usr/include/boost \
 # -lboost_system -lboost_filesystem -lboost_thread -lboost_serialization
 
UO_libdll_py_wrap.o:UO_BaseFun.o
 g++ -c UO_libdll_py_wrap.cpp -o UO_libdll_py_wrap.o -fPIC -I/usr/include/python2.7
 # -lboost_シリアライゼーション
 
 
クリーン:
 rm -rf UO_STR.o O_libdll_py_wrap.o UO_BaseFun.o
 rm -rf UO_BaseFun.so

確認する

UO_StoreSystem_py.py:

 UO_BaseFunをインポートする
テスト = UO_BaseFun.UO_C_Socket()
テストを開始します。("127.0.0.1",4121)

要約:

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM を応援していただきありがとうございます。

以下もご興味があるかもしれません:
  • Pythonで簡単な検証コードを実装する
  • PythonはPillow(PIL)ライブラリを使用して検証コード画像の全プロセスを実装します
  • Python 画像検証コード認識最新モジュール muggle_ocr サンプルコード
  • Pythonは検証コード認識を実装する
  • Python を使用してダイナミック リンク ライブラリ dll を作成する方法
  • Pythonのダイナミックリンクライブラリ呼び出しの基本プロセスの詳細な説明
  • Windows と Linux でダイナミック リンク ライブラリを呼び出す Python チュートリアル
  • PythonはEasy Languageダイナミックリンクライブラリを呼び出して検証コード機能を実装します

<<:  InnoDB がシリアル化分離レベルを実装する方法

>>:  vue3.0 でカルーセル コンポーネントをカプセル化する手順

ブログ    

推薦する

インタラクティブな視覚化 JS ライブラリ gojs の使い方の紹介とヒント

目次1. gojsの紹介2. Gojsのアプリケーションシナリオ3. gojs を選ぶ理由: 4. ...

js に基づいて大きなファイルのアップロードとブレークポイントの再開を管理する方法

目次序文フロントエンド構造バックエンド構造(ノード+エクスプレス) FormDataに基づくファイル...

MySQL におけるデータタイムとタイムスタンプの違い

MySQL には 3 つの日付型があります。日付(年-月-日)テーブル test(hiredate ...

CSS でインラインブロック要素間のギャップを削除するいくつかの方法の詳細な説明

最近、モバイルページを制作する際には、レイアウトにインラインブロック要素がよく使われますが、インライ...

HTML に基づいてページを更新せずにフォーム送信を実装する

ページを更新せずにフォーム送信を実装するために Ajax を使用することは、プロジェクトでよく使用さ...

MySQLの日付加算と減算関数の詳細な説明

1. 追加時間()指定した秒数を日付に追加する select addtime(now(),1); -...

Linux 圧縮ファイルコマンド zip の使用例

「.zip」形式は、Windows システムでファイルを圧縮するために使用されます。実際、「.zip...

Linux での MySQL 5.7 の導入とリモート アクセス構成

前書き: 最近、私はパートナーとチームを組んで .NET Core プロジェクトに取り組む予定です。...

OneProxy に基づいて MySQL の読み取り/書き込み分離と負荷分散を実装する

導入パート1: 冒頭に書いたOneProxy は、民間ソフトウェアによって完全に独立して開発された分...

yum を使用して rpm と関連する依存関係をダウンロードして、docker をオフラインでインストールします。

yum を使用してすべての依存関係を一緒にインストールできますが、–downloadonly –d...

Vue 2.0 の基礎を詳しく解説

目次1. 特徴2. 例3. オプション4. 基本的な文法5. ライフサイクル6. ルーティング管理 ...

HTMLページでよく使われるいくつかの小さなメソッド

<Head>タグに追加する<meta http-equiv="pragm...

写真とテキストによる MySQL 8.0.11 インストール チュートリアル

インターネット上には多くのチュートリアルがありますが、基本的には同じです。ただし、細かい原因でソフト...

MIME タイプの完全なリスト

MIME タイプとは何ですか? 1. まず、ブラウザがコンテンツを処理する方法を理解する必要がありま...

WebpackはTypeScriptコードをパッケージ化するためのスキャフォールディングを構築します

フォルダを作成するディレクトリ構造: dabaots npm init -yを初期化して packa...