Detaillierte Erklärung der dynamischen Linkbibliothek, die die C/C++-Methode in Python in Ubuntu aufruft

Detaillierte Erklärung der dynamischen Linkbibliothek, die die C/C++-Methode in Python in Ubuntu aufruft

Boost installieren

Es gibt viele Möglichkeiten, C/C++ aus Python aufzurufen. Dieser Artikel verwendet boost.python. Da in der späteren Phase viel Entwicklungsarbeit an Boost anfällt, wird Boost zusammen installiert. Die Boost-Bibliothek ist zur Verwendung in zwei Teile unterteilt. Einer besteht darin, die entsprechende Header-Datei direkt zu verwenden, und der andere darin, die entsprechende Bibliothek zu kompilieren und zu installieren, bevor sie verwendet werden kann.

Informationen zu spezifischen Installationsmethoden finden Sie unter: https://www.jb51.net/article/150380.htm

Hier verwenden wir:

sudo apt-get installiere libboost-all-dev

Server

Nach Serialisierung senden

main.cpp:

#include <iostream>
#include "libUO.h"
 
int main()
{
 UO_C_Socket t;
// t.StartSocketServer("",4121);
 boost::thread t1(boost::bind(&UO_C_Socket::StartSocketServer,&t,"",4121));
 schlaf(2);
// boost::thread t2(boost::bind(&UO_C_Socket::StartSocketClient,&t,"127.0.0.1",4121));
 
 
// t2.join();
 t1.join();
 gebe 0 zurück;
}

Kunde

Der Client implementiert grundlegende Funktionen in UO_BaseFun.h, kapselt sie und exportiert sie über boost_python. Beachten Sie, dass der Name in BOOST_PYTHON_MODULE mit der vom abschließenden Make generierten So-Datei übereinstimmen muss.

Gleicher Name, sonst kommt es zu einem Fehler, der Fehlername wird vergessen

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-Modul {
 // 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("name",&student::getname,&student::setname)
 // .add_property("Alter",&Student::getage,&Student::setage)
 ;
}

Achten Sie besonders auf den Unterschied zwischen Kompilierung und Verbindung im Makefile. Auftretende undefinierte Symbolfehler erfordern das Hinzufügen dynamischer Linkbibliotheken wie -lboost_filesystem. Ein Fehler tritt auf: pyconfig.h kann nicht gefunden werden und muss eingebunden werden

-I/usr/include/python2.7. Nach Abschluss von make wird die Datei UO_BaseFun.so generiert

Makefile:

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_filesystem -lboost_thread -lboost_serialization -lboost_python -lboost_system
 
 
UO_STR.o:
 g++ -c UO_STR.h -o UO_STR.o -I/usr/include/boost \
 # -lboost_serialisierung 
 
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_serialisierung
 
 
sauber:
 rm -rf UO_STR.o O_libdll_py_wrap.o UO_BaseFun.o
 rm -rf UO_BaseFun.so

verifizieren

UO_StoreSystem_py.py:

 importiere UO_BaseFun
test = UO_BaseFun.UO_C_Socket()
test.StartSocketClient("127.0.0.1",4121)

Zusammenfassen:

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Implementierung eines einfachen Verifizierungscodes mit Python
  • Python verwendet die Pillow-Bibliothek (PIL), um den gesamten Prozess der Codeüberprüfung zu implementieren
  • Python-Bildüberprüfungscodeerkennung, neuestes Modul, Muggle_OCR-Beispielcode
  • Python implementiert die Erkennung von Bestätigungscodes
  • So erstellen Sie eine Dynamic Link Library-DLL mit Python
  • Detaillierte Erläuterung des grundlegenden Prozesses des Aufrufs der Dynamic Link Library durch Python
  • Python-Tutorial zum Aufrufen dynamischer Linkbibliotheken in Windows und Linux
  • Python ruft die dynamische Linkbibliothek Easy Language auf, um die Bestätigungscodefunktion zu implementieren

<<:  Wie InnoDB die Serialisierungsisolationsebene implementiert

>>:  Schritte zum Kapseln der Karussellkomponente in vue3.0

Artikel empfehlen

Prototyp und Prototypenkette Prototyp und Protodetails

Inhaltsverzeichnis 1. Prototyp 2. Prototypenkette...

MySQL-Grundlagen in 1 Stunde

Inhaltsverzeichnis Erste Schritte mit MySQL MySQL...

Zen-Codierung für Editplus – Beispielcodebeschreibung

Er gibt beispielsweise ein: XML/HTML Code div#Seit...

Detaillierte Erklärung der Serveroptionen von Tomcat

1. Konfiguration Die ersten beiden sind standardm...

So erstellen Sie https mit Nginx und dem kostenlosen Tencent Cloud-Zertifikat

Ich habe gelernt, wie man https bekommt. Kürzlich...

Native JS realisiert einheitliche Bewegungen verschiedener Sportarten

In diesem Artikel wird eine einheitliche Bewegung...

So führen Sie eine Spring Boot-Anwendung in Docker aus

In den letzten Tagen habe ich gelernt, wie man Sp...

Beispielcode zum Installieren der ASPNET.Core3.0-Runtime unter Linux

# Die folgenden Beispiele gelten für die x64-Bit-...

Rsync+crontab regelmäßige Synchronisierungssicherung unter centos7

In letzter Zeit möchte ich regelmäßig wichtige in...

HTML-Grundlagen - CSS-Stylesheets, Style-Attribute, Format- und Layoutdetails

1. Position : fest Gesperrte Position (relativ zu...

So konfigurieren Sie Nginx's Anti-Hotlinking

Experimentelle Umgebung • Eine minimal installier...

Vue implementiert Multi-Grid-Eingabefeld auf mobilem Endgerät

Vor Kurzem hat das Unternehmen die Anforderung ge...

Lösung für Überlauf: versteckter Fehler in CSS

Ursache des Fehlers Als ich heute ein Karussell s...