- Это кроссплатформенная библиотека программного обеспечения для c, c++, unix4, posix.
- Эта библиотека постоянно развивается уже более трех лет и служит основой для поддержки многих крупных проектов.
- Включите модульное тестирование, эталонное тестирование, cmake, мониторинг процессов, демон, асинхронные библиотеки libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci...
- Это кроссплатформенная библиотека программного обеспечения для c, c++, unix4, posix.
- Эта библиотека постоянно развивается уже более трех лет и обеспечивает базовую поддержку многих крупномасштабных проектов.
- Встроенные модульные тесты, тесты, cmake, мониторинг процессов, демоны, асинхронные библиотеки libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci...
Библиотека должна быть легкой и оптимизированной. Старайтесь использовать один файл для завершения каждого модуля. Старайтесь не иметь зависимостей между модулями. Попробуйте скопировать несколько файлов отдельно, чтобы выполнить целевую функцию. Исходя из достижения эффективности, порядок использования библиотеки -> clib ->stl -> unix api -> posix -> os api. Необходимо писать больше юнит-тестов, бенчмарков, докера в параллельных распределенных тестах k8s.
Библиотека должна быть легкой и оптимизированной, а один модуль должен быть максимально укомплектован одним файлом. Между модулями не должно быть никаких зависимостей. Попробуйте скопировать несколько файлов по отдельности, чтобы выполнить целевую функцию. порядок использования библиотеки->clib->stl->unix api->posix->os api Чтобы написать больше модульного теста, бенчмарка, докера в параллельном распределенном тестировании k8s.
Код основной библиотеки ccxx находится в папке ccxx в корневом каталоге и имеет размер около 14 МБ. Большинство модулей используют файл .cpp для выполнения своих функций, а метод статического класса по умолчанию вызывается напрямую). Примеры можно найти в каталогах образцов и тестов.
- cxappenv.h: рабочая среда (имя запущенной программы, рабочий каталог, переменные среды)
- cxinterinfo.h: Интерфейс ввода и вывода информации программы. Реализации включают: cxlog.h (журнал), CxConsoleInterinfo (терминал).
- cxfile.h: файловая система
- cxsocket.h: Сетевая связь.
- cxthread.h: сигнал потока, IPC
- cxapplication.h аналогичен циклу событий в (Node.js). Механизм сигнала ожидания используется для опроса очереди событий и ее выполнения. В настоящее время в цикле событий задействованы (cxchannel.h, cxtimer.h). cxapplication_qt.h — это участие Qt в цикле событий Qt.
- cxchannel.h: (для создания экземпляра для использования) открывает независимый поток для отправки, получения и мониторинга. Полученные данные и события передаются в цикл событий основного потока, поэтому данные не нужно блокировать по строкам. Реализации: cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h.
- cxcrc.h: Проверка данных
- cxdatabase.h: (для создания экземпляра для использования) класс интерфейса, который унифицирует операции с данными в форме таблиц. Реализации включают в себя: cxdatabase_odbc.h, cxdatabase_sqlite.h (напрямую вызывайте официальный sqlite3.c для реализации связанных функций).
- cxprocess.h: системный процесс
- cxprocmutex.h: блокировка процесса
- cxtimer.h: (для создания экземпляра для использования) таймер
- cxtime.h: время и дата
- cxuuid.h: GUID, UUID
- cxsharememory.h: общая память, межпроцессное взаимодействие IPC (межпроцессное взаимодействие).
- cxprofile.h: (для создания экземпляра для использования) файл конфигурации закрывается в виде таблицы. Реализации включают: cxprofile_skv_json.h, cxprofile_skv_xml.h. (skv: значение ключа раздела)
- cxencoding.h: реализовать преобразование между GBK и UTF-8.
- Папка cxlua: открывает функциональный блок ccxx в режиме lua, lua_run.h — это вход в main.
- Другие сторонние пакеты включают (cxhiredis.h (закрытие Redis), cxtinyxml.h (чтение и запись XML-файлов), cxrapidjson.h (регулярное выражение), lz4.h (сжатие и распаковка))
- Исходный код gtest, luv, бенчмарка и yaml помещен в 3-е место.
- openssl и Curl добавляют библиотеки, используя файлы заголовков
- вызов c++ python(callpython)(./ccxx/sample/callpython), вызов python c++(cxpython)(./ccxx/ccxx/cxpython) см. https://github.com/oudream/hello-cmake.
- Официальный пример кода opencv включен в cmake и может быть скомпилирован для облегчения тестирования.
Код основной библиотеки ccxx расположен в папке ccxx в корневом каталоге (около 14 МБ). Модули в основном используют файл .cpp для выполнения функции, а метод статического класса по умолчанию вызывается напрямую. Примеры см. в разделе). каталог образцов и испытаний.
- cxappenv.h: рабочая среда (имя запускаемой программы, рабочий каталог, переменные среды)
- cxinterinfo.h: интерфейс ввода и вывода информации о программе. Реализации: cxlog.h (журнал), CxConsoleInterinfo (терминал).
- cxfile.h: файловая система
- cxsocket.h: сетевое соединение
- cxthread.h: сигнал потока, IPC
- cxapplication.h аналогичен циклу событий в (Node.js). Механизм сигнала ожидания используется для опроса и выполнения очереди событий, участвующей в данный момент в цикле событий (cxchannel.h, cxtimer.h). цикл событий, в котором Qt участвует в Qt.
- cxchannel.h: (для создания экземпляра для использования) открыть отдельный поток для отправки, получения и мониторинга, получать данные и события, передаваемые в цикл событий основного потока, поэтому данные не нужно блокировать между строками. : cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h: проверка данных
- cxdatabase.h: (создается экземпляр для использования) класс интерфейса, который унифицирует операции с данными в таблице. Реализации: cxdatabase_odbc.h, cxdatabase_sqlite.h (непосредственно вызывайте официальный sqlite3.c для выполнения связанных функций).
- cxprocess.h: системный процесс
- cxprocmutex.h: блокировка процесса
- cxtimer.h: (для создания экземпляра) таймер
- cxtime.h: время и дата
- cxuuid.h: GUID, UUID
- cxsharememory.h: общая память, IPC (межпроцессная связь)
- cxprofile.h: (для создания экземпляра для использования). Профиль закрыт для использования в качестве таблицы. Реализации: cxprofile_skv_json.h, cxprofile_skv_xml.h (skv: значение ключа раздела).
- cxencoding.h: конвертировать между GBK и UTF-8
- Папка cxlua: предоставляет функциональные блоки ccxx в lua, lua_run.h — основная запись.
- Другие сторонние пакеты включают (cxhiredis.h (закрыт Redis), cxtinyxml.h (чтение и запись XML-файла), cxrapidjson.h (регулярное выражение), lz4.h (сжатие и распаковка))
- gtest, luv, тестовый код, собственный исходный код yaml помещен на 3-е место.
- openssl, curl — это заголовочный файл плюс библиотека
- вызов c++ python (callpython) (./ccxx/sample/callpython), вызов python c++ (cxpython) (./ccxx/ccxx/cxpython). См. [https://github.com/oudream/hello-cmake] (https). //github.com/oudream/hello-cmake)
- Официальный образец кода opencv включен в cmake и может быть скомпилирован для удобства тестирования.
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 — библиотека для подключения баз данных с помощью odbc.
- ODBC: ccxx_database_odbc — это библиотека, использующая odbc для подключения к базе данных.
- UUID: за исключением окон, CxUuid (uuid) реализуется с использованием библиотеки libuuid.
- UUID: за исключением окон, CxUuid (uuid) реализуется с использованием библиотеки 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)
Скомпилированные картинки для каждой операционной системы (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: если загружено, счетчик > максимальный возврат
задача: добавить канал libuv
todo: выход или сигнал: реентерабельная функция, например: CxLog() <<