- Esta é uma biblioteca de software de plataforma cruzada sobre c, c++, unix4, posix.
- Esta biblioteca tem sido desenvolvida continuamente há mais de três anos e serve como suporte subjacente para muitos projetos de grande porte.
- Incorporar teste unitário, teste de benchmark, cmake, monitoramento de processos, daemon, bibliotecas assíncronas libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci ...
- Esta é uma biblioteca de software de plataforma cruzada sobre c, c++, unix4, posix.
- Esta biblioteca está em desenvolvimento contínuo há mais de três anos e fornece suporte básico para muitos projetos de grande escala.
- Testes unitários incorporados, benchmarks, cmake, monitoramento de processos, daemons, bibliotecas assíncronas libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci...
A biblioteca deve ser leve e simplificada. Tente usar um arquivo para completar cada módulo. Tente copiar alguns arquivos sozinhos para completar a função de destino. Com base na obtenção de eficiência, a ordem de uso da biblioteca -> clib ->stl -> unix api -> posix -> os api. É necessário escrever mais testes unitários, benchmarks, docker em testes distribuídos paralelos do k8s.
A biblioteca deve ser leve e simplificada, e um módulo deve ser concluído com um arquivo, tanto quanto possível. Tente copiar vários arquivos separadamente para completar a função de destino. ordem de uso da biblioteca-> clib-> stl-> unix api-> posix-> os api. Para escrever mais testes de unidade, benchmark, docker em testes distribuídos paralelos k8s.
O código da biblioteca principal do ccxx está na pasta ccxx no diretório raiz e tem cerca de 14 MB. A maioria dos módulos usa um arquivo .cpp para completar suas funções, e o método de classe estática padrão é chamado diretamente). Para exemplos, consulte os diretórios sample e test.
- cxappenv.h: Ambiente de execução (nome do programa em execução, diretório de trabalho, variáveis de ambiente)
- cxinterinfo.h: Interface de entrada e saída de informações do programa. As implementações incluem: cxlog.h (log), CxConsoleInterinfo (terminal)
- cxfile.h: sistema de arquivos
- cxsocket.h: Comunicação de rede
- cxthread.h: sinal de thread, IPC
- cxapplication.h é semelhante ao Event Loop em (Node.js). O mecanismo de sinal de espera é usado para pesquisar a fila de eventos e executá-la. Atualmente envolvidos no Event Loop estão (cxchannel.h, cxtimer.h). cxapplication_qt.h é a participação do Qt no Event Loop do Qt.
- cxchannel.h: (para ser instanciado para uso) abre um thread independente para envio, recebimento e monitoramento. Os dados e eventos recebidos são enviados para o Event Loop do thread principal, para que os dados não precisem ser bloqueados entre linhas. As implementações são: cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h: Verificação de dados
- cxdatabase.h: (a ser instanciado para uso) uma classe de interface que unifica operações de dados na forma de tabelas. As implementações incluem: cxdatabase_odbc.h, cxdatabase_sqlite.h (chame diretamente sqlite3.c oficial para implementar funções relacionadas)
- cxprocess.h: processo do sistema
- cxprocmutex.h: bloqueio de processo
- cxtimer.h: (a ser instanciado para uso) temporizador
- cxtime.h: hora e data
- cxuuid.h: GUID, UUID
- cxsharememory.h: Memória compartilhada, comunicação entre processos IPC (InterProcess Communication)
- cxprofile.h: (para ser instanciado para uso) o arquivo de configuração é fechado em forma de tabela. As implementações incluem: cxprofile_skv_json.h, cxprofile_skv_xml.h. (skv: valor da chave da seção)
- cxencoding.h: Implementar conversão entre GBK e UTF-8
- Pasta cxlua: expõe o bloco de função ccxx no modo lua, lua_run.h é a entrada para main.
- Outros pacotes de terceiros incluem (cxhiredis.h (fechamento do Redis), cxtinyxml.h (leitura e gravação de arquivo XML), cxrapidjson.h (expressão regular), lz4.h (compactação e descompactação))
- O código-fonte de gtest, luv, benchmark e yaml foi colocado em 3º lugar.
- openssl e curl adicionam bibliotecas usando arquivos de cabeçalho
- chamada c++ python (callpython) (./ccxx/sample/callpython), chamada python c++ (cxpython) (./ccxx/ccxx/cxpython), consulte https://github.com/oudream/hello-cmake).
- O código de amostra oficial do opencv foi incluído no cmake e pode ser compilado para facilitar o teste.
O código da biblioteca principal do ccxx está localizado na pasta ccxx no diretório raiz (cerca de 14 MB, os módulos usam principalmente um arquivo .cpp para completar a função e o método de classe estática padrão é chamado diretamente). o diretório de amostra e teste.
- cxappenv.h: ambiente em execução (nome do programa de execução, diretório de trabalho, variáveis de ambiente)
- cxinterinfo.h: interface de entrada e saída de informações do programa. As implementações são: cxlog.h (log), CxConsoleInterinfo (terminal).
- cxfile.h: sistema de arquivos
- cxsocket.h: comunicação de rede
- cxthread.h: sinal de thread, IPC
- cxapplication.h é semelhante ao Event Loop em (Node.js). O mecanismo de sinal de espera é usado para pesquisar e executar a fila de eventos que participa atualmente do Event Loop (cxchannel.h, cxapplication_qt.h). o loop de eventos onde Qt participa do Qt.
- cxchannel.h: (para ser instanciado para uso) abra um thread separado para enviar e receber e monitorar, receber dados e eventos enviados para o Event Loop do thread principal, para que os dados não precisem ser bloqueados entre linhas. : cxchannel_udp.h, cxchannel_tcpserver.h, cxchannel_tcpclient.h, cxchannel_serial.h
- cxcrc.h: verificação de dados
- cxdatabase.h: (a ser instanciada para uso) classe de interface que unifica as operações de dados em uma tabela. As implementações são: cxdatabase_odbc.h, cxdatabase_sqlite.h (chame diretamente o sqlite3.c oficial para obter funções relacionadas).
- cxprocess.h: processo do sistema
- cxprocmutex.h: bloqueio de processo
- cxtimer.h: (a ser instanciado para uso) timer
- cxtime.h: hora e data
- cxuuid.h: GUID, UUID
- cxsharememory.h: memória compartilhada, IPC (Comunicação InterProcess)
- cxprofile.h: (a ser instanciado para uso) O perfil é fechado para uso como uma tabela. As implementações são: cxprofile_skv_json.h, cxprofile_skv_xml.h (skv: valor da chave da seção).
- cxencoding.h: converte entre GBK e UTF-8
- Pasta cxlua: expõe blocos de função ccxx em lua, lua_run.h é a entrada principal.
- Outros pacotes de terceiros incluem (cxhiredis.h (fechado pelo Redis), cxtinyxml.h (leitura e gravação de arquivo XML), cxrapidjson.h (expressão regular), lz4.h (compactação e descompactação))
- gtest, luv, benchmark, o próprio código-fonte do yaml foi colocado em 3º lugar.
- openssl, curl é um arquivo de cabeçalho mais uma biblioteca
- c++ chama python (callpython) (./ccxx/sample/callpython), python chama c++ (cxpython) (./ccxx/ccxx/cxpython). Consulte [https://github.com/oudream/hello-cmake] (https://github.com/oudream/hello-cmake) ://github.com/oudream/hello-cmake)
- O código de amostra oficial do opencv foi incluído no cmake e pode ser compilado para facilitar o teste.
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 é uma biblioteca para conectar bancos de dados com odbc
- ODBC: ccxx_database_odbc é uma biblioteca que usa odbc para se conectar ao banco de dados
- UUID: Exceto para Windows, CxUuid (uuid) é implementado usando a biblioteca libuuid
- UUID: Exceto para Windows, CxUuid (uuid) é implementado usando a biblioteca 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)
Imagens compiladas para cada sistema operacional (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: se carregado contagem > retorno máximo
tarefa: adicionar canal libuv
todo: saída ou sinal: função reentrante, por exemplo: CxLog() <<