- Ini adalah perpustakaan perangkat lunak perpustakaan lintas platform tentang c, c++, unix4, posix.
- Perpustakaan ini terus dikembangkan selama lebih dari tiga tahun, dan berfungsi sebagai pendukung bagi banyak proyek besar.
- Menggabungkan pengujian unit, pengujian benchmark, cmake, pemantauan proses, daemon, perpustakaan asinkron libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci ...
- Ini adalah perpustakaan perangkat lunak perpustakaan lintas platform tentang c, c++, unix4, posix.
- Perpustakaan ini terus dikembangkan selama lebih dari tiga tahun, dan menyediakan dukungan dasar untuk banyak proyek berskala besar.
- Tes unit tergabung, benchmark, cmake, pemantauan proses, daemon, perpustakaan async libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci...
Pustaka harus ringan dan efisien. Cobalah untuk menggunakan satu file untuk menyelesaikan setiap modul. Cobalah untuk tidak memiliki ketergantungan antar modul. Cobalah untuk menyalin beberapa file saja untuk menyelesaikan fungsi target. Atas dasar pencapaian efisiensi, urutan penggunaan perpustakaan -> clib ->stl -> unix api -> posix -> os api. Penting untuk menulis lebih banyak pengujian unit, benchmark, buruh pelabuhan dalam pengujian terdistribusi paralel k8s.
Pustaka harus ringan dan efisien, dan satu modul harus diselesaikan dengan satu file sebanyak mungkin. Tidak boleh ada ketergantungan antar modul. Cobalah untuk menyalin beberapa file secara terpisah untuk menyelesaikan fungsi target urutan penggunaan perpustakaan-> clib-> stl-> unix api-> posix-> os api. Untuk menulis lebih banyak pengujian unit, benchmark, buruh pelabuhan dalam pengujian terdistribusi paralel k8s.
Kode perpustakaan inti ccxx ada di folder ccxx di direktori root, dan ukurannya sekitar 14MB. Sebagian besar modul menggunakan file .cpp untuk menyelesaikan fungsinya, dan metode kelas statis default dipanggil secara langsung). Sebagai contoh, silakan lihat direktori sampel dan pengujian.
- cxappenv.h: Lingkungan yang berjalan (nama program yang berjalan, direktori kerja, variabel lingkungan)
- cxinterinfo.h: Antarmuka input dan output informasi dari program. Implementasinya meliputi: cxlog.h (log), CxConsoleInterinfo (terminal)
- cxfile.h: sistem file
- cxsocket.h: Komunikasi jaringan
- cxthread.h: sinyal utas, IPC
- cxapplication.h mirip dengan Event Loop di (Node.js). Mekanisme sinyal tunggu digunakan untuk melakukan polling antrian acara dan mengeksekusinya. Saat ini terlibat dalam Event Loop adalah (cxchannel.h, cxtimer.h). cxapplication_qt.h adalah partisipasi Qt dalam Event Loop Qt.
- cxchannel.h: (untuk dipakai) membuka thread independen untuk mengirim, menerima, dan memantau. Data dan kejadian yang diterima didorong ke Event Loop di thread utama, sehingga data tidak perlu dikunci di seluruh baris. Implementasinya adalah: cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h: Verifikasi data
- cxdatabase.h: (untuk dipakai) kelas antarmuka yang menyatukan operasi data dalam bentuk tabel. Implementasinya meliputi: cxdatabase_odbc.h, cxdatabase_sqlite.h (langsung hubungi sqlite3.c resmi untuk mengimplementasikan fungsi terkait)
- cxprocess.h: proses sistem
- cxprocmutex.h: kunci proses
- cxtimer.h: (untuk dipakai) pengatur waktu
- cxtime.h: waktu dan tanggal
- cxuuid.h: GUID, UUID
- cxsharememory.h: Memori bersama, komunikasi antar proses IPC (InterProcess Communication)
- cxprofile.h: (untuk dipakai) file konfigurasi ditutup dalam bentuk tabel. Implementasinya meliputi: cxprofile_skv_json.h, cxprofile_skv_xml.h. (skv: nilai kunci bagian)
- cxencoding.h: Menerapkan konversi antara GBK dan UTF-8
- folder cxlua: memperlihatkan blok fungsi ccxx dalam mode lua, lua_run.h adalah pintu masuk ke main.
- Paket pihak ketiga lainnya termasuk (cxhiredis.h (penutupan Redis), cxtinyxml.h (membaca dan menulis file Xml), cxrapidjson.h (ekspresi reguler), lz4.h (kompresi dan dekompresi))
- Kode sumber gtest, luv, benchmark, dan yaml ditempatkan di urutan ke-3.
- openssl dan curl menambahkan perpustakaan menggunakan file header
- c++ memanggil python(callpython)(./ccxx/sample/callpython), panggilan python c++(cxpython)(./ccxx/ccxx/cxpython).
- Kode contoh resmi opencv telah disertakan dengan cmake dan dapat dikompilasi untuk memfasilitasi pengujian.
Kode perpustakaan inti ccxx terletak di folder ccxx di direktori root (sekitar 14MB). Modul sebagian besar menggunakan file .cpp untuk menyelesaikan fungsinya, dan metode kelas statis default dipanggil secara langsung). direktori sampel dan pengujian.
- cxappenv.h: lingkungan berjalan (jalankan nama program, direktori kerja, variabel lingkungan)
- cxinterinfo.h: antarmuka input dan output informasi program. Implementasinya adalah: cxlog.h (log), CxConsoleInterinfo (terminal)
- cxfile.h: sistem file
- cxsocket.h: komunikasi jaringan
- cxthread.h: sinyal utas, IPC
- cxapplication.h mirip dengan Event Loop di (Node.js). Mekanisme sinyal tunggu digunakan untuk melakukan polling dan mengeksekusi antrian acara. Saat ini berpartisipasi dalam Event Loop (cxchannel.h, cxtimer.h). loop acara tempat Qt berpartisipasi dalam Qt.
- cxchannel.h: (untuk dipakai) buka thread terpisah untuk mengirim dan menerima serta memantau, menerima data dan kejadian mendorong ke Event Loop dari thread utama, sehingga data tidak perlu dikunci di seluruh baris : cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h: pemeriksaan data
- cxdatabase.h: (untuk dipakai) kelas antarmuka yang menyatukan operasi data dalam sebuah tabel. Implementasinya adalah: cxdatabase_odbc.h, cxdatabase_sqlite.h (langsung hubungi sqlite3.c resmi untuk mencapai fungsi terkait)
- cxprocess.h: proses sistem
- cxprocmutex.h: kunci proses
- cxtimer.h: (untuk dipakai) timer
- cxtime.h: waktu dan tanggal
- cxuuid.h: GUID, UUID
- cxsharememory.h: memori bersama, IPC (Komunikasi AntarProses)
- cxprofile.h: (untuk dipakai) Profil ditutup untuk digunakan sebagai tabel. Implementasinya adalah: cxprofile_skv_json.h, cxprofile_skv_xml.h.
- cxencoding.h: mengkonversi antara GBK dan UTF-8
- folder cxlua: memperlihatkan blok fungsi ccxx di lua, lua_run.h adalah entri utama.
- Paket pihak ketiga lainnya termasuk (cxhiredis.h (ditutup oleh Redis), cxtinyxml.h (baca dan tulis file Xml), cxrapidjson.h (ekspresi reguler), lz4.h (kompresi dan dekompresi))
- gtest, luv, benchmark, kode sumber yaml sendiri ditempatkan di urutan ke-3.
- openssl, curl adalah file header plus perpustakaan
- c++ memanggil python (callpython) (./ccxx/sample/callpython), panggilan python c++ (cxpython) (./ccxx/ccxx/cxpython). Lihat [https://github.com/oudream/hello-cmake ] (https ://github.com/oudream/hello-cmake)
- Kode contoh resmi untuk opencv telah disertakan dengan cmake dan dapat dikompilasi untuk memudahkan pengujian.
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 adalah perpustakaan untuk menghubungkan database dengan odbc
- ODBC: ccxx_database_odbc adalah perpustakaan yang menggunakan odbc untuk terhubung ke database
- UUID : Kecuali untuk windows, CxUuid (uuid) diimplementasikan menggunakan perpustakaan libuuid
- UUID: Kecuali untuk windows, CxUuid (uuid) diimplementasikan menggunakan perpustakaan libuuid
# ## 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)
Gambar yang dikompilasi untuk setiap sistem operasi (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
# ...
yang harus dilakukan: CxDatabase::loadSql : jika dimuat jumlah > pengembalian maksimal
rencana: tambahkan saluran libuv
tugas: keluar atau sinyal: fungsi masuk kembali misalnya: CxLog() <<