- Dies ist eine plattformübergreifende Softwarebibliothek für C, C++, Unix4 und Posix.
- Diese Bibliothek wird seit mehr als drei Jahren kontinuierlich weiterentwickelt und dient als Basisunterstützung für viele große Projekte.
- Integrieren Sie Unit-Test, Benchmark-Test, cmake, Prozessüberwachung, Daemon, asynchrone Bibliotheken libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci ...
- Dies ist eine plattformübergreifende Softwarebibliothek für C, C++, Unix4 und Posix.
- Diese Bibliothek wird seit mehr als drei Jahren kontinuierlich weiterentwickelt und bietet grundlegende Unterstützung für viele Großprojekte.
- Eingebaute Unit-Tests, Benchmarks, cmake, Prozessüberwachung, Daemons, asynchrone Bibliotheken libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci...
Die Bibliothek sollte kompakt und schlank sein. Versuchen Sie, eine Datei zu verwenden, um jedes Modul zu vervollständigen. Versuchen Sie, keine Abhängigkeiten zwischen den Modulen zu haben. Auf der Grundlage der Effizienz wird die Reihenfolge der Verwendung der Bibliothek -> clib -> stl -> unix api -> posix -> os api festgelegt. Es ist notwendig, mehr Unit-Tests, Benchmarks und Docker in k8s parallel verteilten Tests zu schreiben.
Die Bibliothek sollte leichtgewichtig und rationalisiert sein und ein Modul sollte so weit wie möglich mit einer Datei vervollständigt werden. Es sollten keine Abhängigkeiten zwischen den Modulen bestehen. Versuchen Sie, mehrere Dateien separat zu kopieren Reihenfolge der Verwendung der Bibliothek -> clib -> stl -> unix api -> posix -> os api Zum Schreiben weiterer Unit-Tests, Benchmarks und Docker in k8s für parallele verteilte Tests.
Der Kernbibliothekscode von ccxx befindet sich im Ordner ccxx im Stammverzeichnis und ist etwa 14 MB groß. Die meisten Module verwenden eine Datei .cpp, um ihre Funktionen abzuschließen, und die standardmäßige statische Klassenmethode wird direkt aufgerufen. Beispiele finden Sie in den Beispiel- und Testverzeichnissen.
- cxappenv.h: Laufumgebung (Name des laufenden Programms, Arbeitsverzeichnis, Umgebungsvariablen)
- cxinterinfo.h: Informationseingabe- und -ausgabeschnittstelle des Programms. Zu den Implementierungen gehören: cxlog.h (Protokoll), CxConsoleInterinfo (Terminal)
- cxfile.h: Dateisystem
- cxsocket.h: Netzwerkkommunikation
- cxthread.h: Thread-Signal, IPC
- cxapplication.h ähnelt der Ereignisschleife in (Node.js). Der Wartesignalmechanismus wird verwendet, um die Ereigniswarteschlange abzufragen und auszuführen. Derzeit sind (cxchannel.h, cxtimer.h) an der Ereignisschleife beteiligt. cxapplication_qt.h ist die Teilnahme von Qt an der Ereignisschleife von Qt.
- cxchannel.h: (zur Verwendung instanziierbar) öffnet einen unabhängigen Thread zum Senden, Empfangen und Überwachen. Die empfangenen Daten und Ereignisse werden in die Ereignisschleife des Hauptthreads verschoben, sodass die Daten nicht zeilenübergreifend gesperrt werden müssen. Die Implementierungen sind: cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h: Datenüberprüfung
- cxdatabase.h: (zur Verwendung zu instanziieren) eine Schnittstellenklasse, die Datenoperationen in Form von Tabellen vereinheitlicht. Die Implementierungen umfassen: cxdatabase_odbc.h, cxdatabase_sqlite.h (rufen Sie direkt das offizielle sqlite3.c auf, um verwandte Funktionen zu implementieren)
- cxprocess.h: Systemprozess
- cxprocmutex.h: Prozesssperre
- cxtimer.h: (zur Verwendung zu instanziieren) Timer
- cxtime.h: Uhrzeit und Datum
- cxuuid.h: GUID, UUID
- cxsharememory.h: Gemeinsamer Speicher, Interprozesskommunikation IPC (InterProcess Communication)
- cxprofile.h: (wird zur Verwendung instanziiert) Die Konfigurationsdatei wird in Form einer Tabelle geschlossen. Zu den Implementierungen gehören: cxprofile_skv_json.h, cxprofile_skv_xml.h. (skv: Abschnittsschlüsselwert)
- cxencoding.h: Konvertierung zwischen GBK und UTF-8 implementieren
- cxlua-Ordner: stellt den ccxx-Funktionsblock im Lua-Modus bereit, lua_run.h ist der Eingang zu main.
- Zu den weiteren Paketen von Drittanbietern gehören (cxhiredis.h (Redis-Schließung), cxtinyxml.h (Lesen und Schreiben von XML-Dateien), cxrapidjson.h (regulärer Ausdruck), lz4.h (Komprimierung und Dekomprimierung)).
- Der Quellcode von gtest, luv, benchmark und yaml wurde an dritter Stelle platziert.
- OpenSSL und Curl fügen Bibliotheken mithilfe von Header-Dateien hinzu
- c++-Aufruf python(callpython)(./ccxx/sample/callpython), Python-Aufruf c++(cxpython)(./ccxx/ccxx/cxpython).
- Der offizielle Beispielcode von opencv ist in cmake enthalten und kann zur Erleichterung des Testens kompiliert werden.
Der Kernbibliothekscode von ccxx befindet sich im ccxx-Ordner im Stammverzeichnis (ca. 14 MB). Die meisten Module verwenden eine Datei .cpp, um die Funktion auszuführen, und die standardmäßige statische Klassenmethode wird direkt aufgerufen das Verzeichnis der Proben und Tests.
- cxappenv.h: Laufumgebung (Name des Laufprogramms, Arbeitsverzeichnis, Umgebungsvariablen)
- cxinterinfo.h: Eingabe- und Ausgabeschnittstelle für Programminformationen. Implementierungen sind: cxlog.h (Protokoll), CxConsoleInterinfo (Terminal).
- cxfile.h: Dateisystem
- cxsocket.h: Netzwerkkommunikation
- cxthread.h: Thread-Signal, IPC
- cxapplication.h ähnelt der Ereignisschleife in (Node.js). die Ereignisschleife, in der Qt an Qt teilnimmt.
- cxchannel.h: (zur Verwendung instanziiert) Öffnen Sie einen separaten Thread zum Senden und Empfangen sowie zum Überwachen und Pushen von Daten und Ereignissen in die Ereignisschleife des Hauptthreads, sodass die Daten nicht zeilenübergreifend gesperrt werden müssen : cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h: Datenprüfung
- cxdatabase.h: (zur Verwendung zu instanziierende) Schnittstellenklasse, die Datenoperationen in einer Tabelle vereinheitlicht. Die Implementierungen sind: cxdatabase_odbc.h, cxdatabase_sqlite.h (rufen Sie direkt die offizielle sqlite3.c auf, um verwandte Funktionen zu erreichen).
- cxprocess.h: Systemprozess
- cxprocmutex.h: Prozesssperre
- cxtimer.h: (zur Verwendung instanziierbar) Timer
- cxtime.h: Uhrzeit und Datum
- cxuuid.h: GUID, UUID
- cxsharememory.h: gemeinsam genutzter Speicher, IPC (InterProcess Communication)
- cxprofile.h: (zur Verwendung zu instanziieren) Das Profil ist zur Verwendung als Tabelle geschlossen. Die Implementierungen sind: cxprofile_skv_json.h, cxprofile_skv_xml.h (skv: Abschnittsschlüsselwert).
- cxencoding.h: Konvertierung zwischen GBK und UTF-8
- cxlua-Ordner: macht ccxx-Funktionsblöcke in Lua verfügbar, lua_run.h ist der Haupteintrag.
- Zu den weiteren Paketen von Drittanbietern gehören (cxhiredis.h (von Redis geschlossen), cxtinyxml.h (Lesen und Schreiben von XML-Dateien), cxrapidjson.h (regulärer Ausdruck), lz4.h (Komprimierung und Dekomprimierung)).
- Der eigene Quellcode von gtest, luv, benchmark und yaml wurde auf Platz 3 platziert.
- OpenSSL, Curl ist eine Header-Datei plus Bibliothek
- c++ call python (callpython) (./ccxx/sample/callpython), python call c++ (cxpython) (./ccxx/ccxx/cxpython). Siehe [https://github.com/oudream/hello-cmake] (https ://github.com/oudream/hello-cmake)
- Der offizielle Beispielcode für opencv ist in cmake enthalten und kann zum einfachen Testen kompiliert werden.
git clone https://github.com/oudream/ccxx.git
# You can extract several related files for use as needed
# 可以根据需要提取其中几个相关文件来用的
docker run -d -p 2235:22 oudream/ubuntu-ccxx-env:18.04.12
ssh root@localhost -p 2235 -AXY -v
# password is: 123456
# You can run the following examples to experiment (可以运行以下样例来试验)
/opt/ccxx/build/deploy/unix/bin_d/cxtest_timer
# or
/opt/ccxx/build/deploy/unix/bin_d/cxtest_channel_udp_client1
# or
/opt/ccxx/build/deploy/unix/bin_d/cxtest_channel_udp_server1
# or
/opt/ccxx/build/deploy/unix/bin_d/cxsample_lua
# or
/opt/ccxx/build/deploy/unix/bin_d/benchmark_cxstring
# ctrl + c to exit
^c
- ODBC: ccxx_database_odbc ist eine Bibliothek zum Verbinden von Datenbanken mit odbc
- ODBC: ccxx_database_odbc ist eine Bibliothek, die odbc verwendet, um eine Verbindung zur Datenbank herzustellen
- UUID: Mit Ausnahme von Windows wird CxUuid (uuid) mithilfe der libuuid-Bibliothek implementiert
- UUID: Mit Ausnahme von Windows wird CxUuid (uuid) mithilfe der libuuid-Bibliothek implementiert
# ## mac
brew install unixodbc
# ## Ubuntu: -D"OTL_ODBC_UNIX" -lodbc
sudo apt-get install unixodbc unixodbc-dev
sudo apt-get install uuid-dev
# ## CentOS: -D"OTL_ODBC_UNIX" -lodbc
sudo yum install unixODBC-devel
sudo yum install libuuid-devel
# git and compile
git clone https://github.com/oudream/ccxx.git
cd ccxx
cmake . -DCMAKE_BUILD_TYPE=Debug --build . -B " ./build/cmake-gcc "
cd ./build/cmake-gcc && make
# try run gtest (google test)
make test
# try run app
cd /opt/ccxx/build/deploy/unix/bin_d
./cxtest_timer
./cxtest_channel_udp_client1
./cxtest_channel_udp_server1
./cxsample_lua
./benchmark_cxstring
# ...
vim /opt/ccxx/build/cmake/local.all.config.cmake
# e.g. modify -> set(gs_project_enable_uv 1) to set(gs_project_enable_uv 0)
# e.g. modify -> set(gs_project_enable_openssl 1) to set(gs_project_enable_openssl 0)
Zusammengestellte Bilder für jedes Betriebssystem (cn)
# ## 1 step: build and install OpenCV 4.1.2 (4c71dbf)
# # https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
# # https://opencv.org/releases/
# cd /opt/<my_working_directory>
# ## 1 step: apt insall depend libs
# libopencv-dev
sudo echo " deb http://security.ubuntu.com/ubuntu xenial-security main " | tee /etc/apt/sources.list.d/libjasper.list &&
sudo apt update -y ; apt upgrade -y &&
sudo apt install -y gcc g++ cmake build-essential gdb gdbserver git
unixodbc unixodbc-dev libcurl4-openssl-dev uuid uuid-dev libssl-dev libncurses5-dev
qt5-default libqt5svg5 libqt5svg5-dev qtcreator
libssl-dev libncurses5-dev
libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
software-properties-common
# ## 2 step: git code and make it
cd /opt &&
git clone https://github.com/opencv/opencv.git &&
cd /opt/opencv && git reset --hard 4c71dbf &&
mkdir build && cd build &&
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local .. &&
make -j7 && sudo make install
# ## 3 step: down source and compile
cd /opt &&
git clone https://github.com/oudream/ccxx.git &&
cd ccxx &&
cmake . -DCMAKE_BUILD_TYPE=Debug -DCCXX_BUILD_TYPE=all --build . -B " ./build/cmake-gcc " &&
cd build/cmake-gcc && make
# ## 4 step: run apps
/opt/ccxx/build/deploy/unix/bin_d/cxtest_timer
# or
/opt/ccxx/build/deploy/unix/bin_d/cxtest_channel_udp_client1
# or
/opt/ccxx/build/deploy/unix/bin_d/cxtest_channel_udp_server1
# or
/opt/ccxx/build/deploy/unix/bin_d/cxsample_lua
# or
/opt/ccxx/build/deploy/unix/bin_d/benchmark_cxstring
# ctrl + c to exit
^c
# ...
todo: CxDatabase::loadSql: wenn geladen, Anzahl > maximale Rückgabe
Aufgabe: libuv-Kanal hinzufügen
todo: Exit oder Signal: Reentrant-Funktion, z. B.: CxLog() <<