- Il s'agit d'une bibliothèque logicielle multiplateforme sur c, c++, unix4, posix.
- Cette bibliothèque a été développée continuellement pendant plus de trois ans et sert de support sous-jacent à de nombreux grands projets.
- Incorporer des tests unitaires, des tests de référence, cmake, une surveillance des processus, un démon, des bibliothèques asynchrones libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci...
- Il s'agit d'une bibliothèque logicielle multiplateforme sur c, c++, unix4, posix.
- Cette bibliothèque est en développement continu depuis plus de trois ans et fournit un support de base pour de nombreux projets à grande échelle.
- Tests unitaires intégrés, benchmarks, cmake, surveillance des processus, démons, bibliothèques asynchrones libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci...
La bibliothèque doit être légère et rationalisée. Essayez d'utiliser un seul fichier pour compléter chaque module. Essayez de ne pas avoir de dépendances entre les modules. Essayez de copier quelques fichiers uniquement pour terminer la fonction cible. Sur la base de l'efficacité, l'ordre d'utilisation de la bibliothèque -> clib ->stl -> unix api -> posix -> os api. Il est nécessaire d'écrire plus de tests unitaires, de benchmarks, de docker dans les tests distribués parallèles du k8.
La bibliothèque doit être légère et rationalisée, et un module doit être complété autant que possible avec un seul fichier. Il ne doit y avoir aucune dépendance entre les modules. Essayez de copier plusieurs fichiers séparément pour compléter la fonction cible. ordre d'utilisation de la bibliothèque-> clib-> stl-> unix api-> posix-> os api Pour écrire plus de tests unitaires, benchmark, docker dans les tests distribués parallèles k8s.
Le code de la bibliothèque principale de ccxx se trouve dans le dossier ccxx du répertoire racine et sa taille est d'environ 14 Mo. La plupart des modules utilisent un fichier .cpp pour remplir leurs fonctions, et la méthode de classe statique par défaut est appelée directement). Pour des exemples, veuillez vous référer aux répertoires d’échantillons et de tests.
- cxappenv.h : environnement d'exécution (nom du programme en cours d'exécution, répertoire de travail, variables d'environnement)
- cxinterinfo.h : Interface d'entrée et de sortie d'informations du programme. Les implémentations incluent : cxlog.h (log), CxConsoleInterinfo (terminal)
- cxfile.h : système de fichiers
- cxsocket.h : communication réseau
- cxthread.h : signal de thread, IPC
- cxapplication.h est similaire à Event Loop dans (Node.js). Le mécanisme du signal d'attente est utilisé pour interroger la file d'attente des événements et l'exécuter. Actuellement impliqués dans Event Loop sont (cxchannel.h, cxtimer.h). cxapplication_qt.h est la participation de Qt à la boucle d'événements de Qt.
- cxchannel.h : (à instancier pour utilisation) ouvre un thread indépendant pour l'envoi, la réception et la surveillance. Les données et événements reçus sont poussés vers la boucle d'événements du thread principal, de sorte que les données n'ont pas besoin d'être verrouillées sur plusieurs lignes. Les implémentations sont : cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h : vérification des données
- cxdatabase.h : (à instancier pour utilisation) une classe d'interface qui unifie les opérations de données sous forme de tables. Les implémentations incluent : cxdatabase_odbc.h, cxdatabase_sqlite.h (appelez directement sqlite3.c officiel pour implémenter les fonctions associées)
- cxprocess.h : processus système
- cxprocmutex.h : verrouillage du processus
- cxtimer.h : (à instancier pour utilisation) timer
- cxtime.h : heure et date
- cxuuid.h : GUID, UUID
- cxsharememory.h : Mémoire partagée, communication inter-processus IPC (InterProcess Communication)
- cxprofile.h : (à instancier pour utilisation) le fichier de configuration est fermé sous forme de tableau. Les implémentations incluent : cxprofile_skv_json.h, cxprofile_skv_xml.h. (skv : valeur de la clé de section)
- cxencoding.h : Implémenter la conversion entre GBK et UTF-8
- Dossier cxlua : expose le bloc fonctionnel ccxx en mode lua, lua_run.h est l'entrée de main.
- D'autres packages tiers incluent (cxhiredis.h (fermeture Redis), cxtinyxml.h (lecture et écriture de fichiers XML), cxrapidjson.h (expression régulière), lz4.h (compression et décompression))
- Le code source de gtest, luv, benchmark et yaml a été placé en 3ème.
- openssl et curl ajoutent des bibliothèques à l'aide de fichiers d'en-tête
- appel c++ python(callpython)(./ccxx/sample/callpython), appel python c++(cxpython)(./ccxx/ccxx/cxpython), reportez-vous à https://github.com/oudream/hello-cmake).
- L'exemple de code officiel d'opencv a été inclus avec cmake et peut être compilé pour faciliter les tests.
Le code de la bibliothèque principale de ccxx se trouve dans le dossier ccxx du répertoire racine (environ 14 Mo). Les modules utilisent principalement un fichier .cpp pour compléter la fonction, et la méthode de classe statique par défaut est appelée directement. Pour des exemples, veuillez vous référer à). le répertoire des échantillons et des tests.
- cxappenv.h : environnement d'exécution (nom du programme d'exécution, répertoire de travail, variables d'environnement)
- cxinterinfo.h : interface d'entrée et de sortie des informations sur le programme. Les implémentations sont : cxlog.h (log), CxConsoleInterinfo (terminal).
- cxfile.h : système de fichiers
- cxsocket.h : communication réseau
- cxthread.h : signal de thread, IPC
- cxapplication.h est similaire à la boucle d'événements dans (Node.js). Le mécanisme de signal d'attente est utilisé pour interroger et exécuter la file d'attente d'événements participant actuellement à la boucle d'événements (cxchannel.h, cxtimer.h). la boucle d'événements où Qt participe à Qt.
- cxchannel.h : (à instancier pour utiliser) ouvrez un thread séparé pour envoyer, recevoir et surveiller, recevoir des données et des événements poussés vers la boucle d'événements du thread principal, de sorte que les données n'ont pas besoin d'être verrouillées sur les lignes. : cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h : vérification des données
- cxdatabase.h : (à instancier pour utilisation) classe d'interface qui unifie les opérations de données dans une table. Les implémentations sont : cxdatabase_odbc.h, cxdatabase_sqlite.h (appelez directement le sqlite3.c officiel pour réaliser les fonctions associées)
- cxprocess.h : processus système
- cxprocmutex.h : verrouillage du processus
- cxtimer.h : (à instancier pour utiliser) timer
- cxtime.h : heure et date
- cxuuid.h : GUID, UUID
- cxsharememory.h : mémoire partagée, IPC (InterProcess Communication)
- cxprofile.h : (à instancier pour utilisation) Le profil est fermé pour être utilisé comme table. Les implémentations sont : cxprofile_skv_json.h, cxprofile_skv_xml.h (skv : valeur de clé de section).
- cxencoding.h : conversion entre GBK et UTF-8
- Dossier cxlua : expose les blocs fonctionnels ccxx dans lua, lua_run.h est l'entrée principale.
- D'autres packages tiers incluent (cxhiredis.h (fermé par Redis), cxtinyxml.h (lecture et écriture de fichiers XML), cxrapidjson.h (expression régulière), lz4.h (compression et décompression))
- gtest, luv, benchmark, le propre code source de yaml a été placé en 3ème.
- openssl, curl est un fichier d'en-tête et une bibliothèque
- appel c++ python (callpython) (./ccxx/sample/callpython), appel python c++ (cxpython) (./ccxx/ccxx/cxpython) Reportez-vous à [https://github.com/oudream/hello-cmake] (https). ://github.com/oudream/hello-cmake)
- L'exemple de code officiel pour opencv a été inclus avec cmake et peut être compilé pour des tests faciles.
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 est une bibliothèque pour connecter des bases de données avec odbc
- ODBC : ccxx_database_odbc est une bibliothèque qui utilise odbc pour se connecter à la base de données
- UUID : Sauf pour Windows, CxUuid (uuid) est implémenté à l'aide de la bibliothèque libuid
- UUID : sauf pour Windows, CxUuid (uuid) est implémenté à l'aide de la bibliothèque libuid
# ## 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)
Images compilées pour chaque système d'exploitation (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
# ...
à faire : CxDatabase ::loadSql : si chargé, nombre > retour maximum
todo : ajouter le canal libuv
todo : exit ou signal : fonction réentrante par exemple : CxLog() <<