- これは、C、C++、unix4、posix に関するクロスプラットフォーム ライブラリ ソフトウェア ライブラリです。
- このライブラリは 3 年以上継続的に開発されており、多くの大規模プロジェクトの基礎的なサポートとして機能します。
- 単体テスト、ベンチマーク テスト、cmake、プロセス監視、デーモン、非同期ライブラリ libuv、lua、cpython、re2、json、yaml、mysql、redis、opencv、qt、lz4、oci ... を組み込みます。
- これは、C、C++、unix4、posix に関するクロスプラットフォーム ライブラリ ソフトウェア ライブラリです。
- このライブラリは 3 年以上継続的に開発されており、多くの大規模プロジェクトの基本的なサポートを提供します。
- 組み込まれた単体テスト、ベンチマーク、cmake、プロセス監視、デーモン、非同期ライブラリ libuv、lua、cpython、re2、json、yaml、mysql、redis、opencv、qt、lz4、oci...
ライブラリは軽量で合理化されている必要があります。各モジュールを完了するために 1 つのファイルを使用するようにしてください。ターゲット関数を完了するには、いくつかのファイルを単独でコピーするようにしてください。効率を高めるために、ライブラリ -> clib ->stl -> unix api -> posix -> os api を使用する順序になります。 k8s の並列分散テストでは、さらに単体テスト、ベンチマーク、Docker を作成する必要があります。
ライブラリは軽量かつ効率的である必要があり、効率を考慮して、1 つのモジュールは 1 つのファイルで完了する必要があります。モジュール間には依存関係が存在しないようにしてください。ライブラリの使用順序 -> clib -> stl -> unix api -> posix -> os api。k8s の並列分散テストでさらに単体テスト、ベンチマーク、docker を作成します。
ccxx のコア ライブラリ コードはルート ディレクトリの ccxx フォルダーにあり、サイズは約 14MB です。ほとんどのモジュールは、ファイル .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: システムプロセス
- cxpromutex.h: プロセスロック
- cxtimer.h: (使用のためにインスタンス化される) タイマー
- cxtime.h: 時刻と日付
- cxuuid.h: GUID、UUID
- cxsharememory.h: 共有メモリ、プロセス間通信 IPC (InterProcess Communication)
- 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、benchmark、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 フォルダー (約 14MB) にあります。モジュールはほとんどの場合、ファイル .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: システムプロセス
- cxpromutex.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 フォルダー: lua の ccxx 関数ブロックを公開します。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/hellocmake] (https://github.com/oudream/hellocmake) を参照してください。 ://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 : Windows を除き、CxUuid (uuid) は libuuid ライブラリを使用して実装されます
- UUID: Windows を除き、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 : ロードされた場合のカウント > 最大リターン
todo: libuv チャネルを追加する
todo: 終了またはシグナル: 再入可能関数 例: CxLog() <<