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 でカルーセル コンポーネントをカプセル化する手順

推薦する

Vue で 3D タグ クラウドを実装するための詳細なコード

プレビュー: コード:ページセクション: <テンプレート> <div class=...

MySQL でスロークエリログ機能を有効にする方法

MySQL スロー クエリ ログは、問題のあるクエリを追跡するのに非常に役立ちます。現在のプログラム...

Ant Design Blazor コンポーネントライブラリのルーティング再利用マルチタブ機能

最近、Ant Design Blazor コンポーネント ライブラリにマルチタブ コンポーネントを実...

MySQL ダーティ ページ フラッシュとテーブル スペースの縮小の原理の分析

mysql ダーティページWAL メカニズムにより、InnoDB はステートメントを更新するときに、...

Centos7 での DNS サーバーの構築の概要

目次1. プロジェクト環境: 2: DNSサーバーの設定i: 前方解析を構成する: ii: 逆解像度...

初心者がHTMLタグを学ぶ(3)

関連記事:初心者が学ぶ HTML タグ (2)導入された HTML タグは、必ずしも XHTML 仕...

Nginx ロードバランシング クラスタの実装

(1)実験環境youxi1 192.168.5.101 ロードバランサーyouxi2 192.168...

Baotaパネルを再起動すると、「-ModuleNotFoundError: No module named 'geventwebsocket'」というメッセージが表示されます。

背景:サーバーがFlaskプロジェクトをデプロイし、python3をインストールしたため、再起動時に...

Windows Server 2008 R2 リモート デスクトップのポート 3389 を変更する方法

Windows サーバー リモート デスクトップのデフォルトのポート番号は 3389 です。職場でサ...

Nginx 構成 PC サイトとモバイル サイトの分離によるリダイレクトの実現

PCサイトとモバイルサイトの分離設定にはnginxを使います。私のPCサイトとモバイルサイトは、SE...

浮遊する雲のアニメーションを実現するCSS3

操作効果 html <ヘッド> <メタ文字セット='UTF-8'&...

MySQL 5.7.23 winx64 のインストールと設定方法のグラフィックチュートリアル (win10 の場合)

この記事はMySQL 5.7.23 winx64のインストールチュートリアルを記録します。具体的な内...

期間限定フラッシュセール機能を実装するJavaScript

この記事では、期間限定フラッシュセール機能を実装するためのJavaScriptの具体的なコードを参考...

Alpine Dockerイメージフォント問題解決操作

1. フォントを実行し、フォント フォルダーを開いて、使用するフォント ファイルを見つけます。 2....

MySQL 8.0.17 のインストールと設定のグラフィックチュートリアル

この記事は、参考のためにMySQL 8.0.17のインストールと設定のグラフィックチュートリアルを記...