- 이것은 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...
라이브러리는 가볍고 간소화되어야 합니다. 각 모듈을 완료하려면 하나의 파일을 사용하십시오. 모듈 간에 종속성을 두지 마십시오. 대상 기능을 완료하려면 몇 개의 파일만 복사하십시오. 효율성 달성을 기준으로 라이브러리 -> clib ->stl -> unix api -> posix -> os api 사용 순서입니다. k8s 병렬 분산 테스트에는 더 많은 단위 테스트, 벤치마크, 도커를 작성해야 합니다.
라이브러리는 가볍고 능률적이어야 하며, 하나의 모듈은 가능한 한 하나의 파일로 완성되어야 합니다. 라이브러리 사용 순서-> 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: 시스템 프로세스
- cxprocmutex.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 폴더: lua 모드에서 ccxx 함수 블록을 노출합니다. lua_run.h는 main의 입구입니다.
- 기타 타사 패키지에는 (cxhiredis.h(Redis 클로저), cxtinyxml.h(Xml 파일 읽기 및 쓰기), cxrapidjson.h(정규 표현식), lz4.h(압축 및 압축 풀기))가 포함됩니다.
- gtest, luv, benchmark, yaml의 소스코드는 3위에 배치되었습니다.
- openssl 및 컬은 헤더 파일을 사용하여 라이브러리를 추가합니다.
- 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: 시스템 프로세스
- 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 폴더: lua에 ccxx 함수 블록을 노출합니다. lua_run.h가 주요 항목입니다.
- 기타 타사 패키지에는 (cxhiredis.h(Redis에서 닫음), cxtinyxml.h(Xml 파일 읽기 및 쓰기), cxrapidjson.h(정규 표현식), lz4.h(압축 및 압축 풀기))가 포함됩니다.
- gtest, luv, benchmark, yaml 자체 소스코드가 3위에 올랐습니다.
- openssl, 컬은 헤더 파일과 라이브러리입니다.
- c++ 호출 Python(callpython)(./ccxx/sample/callpython), Python 호출 C++(cxpython)(./ccxx/ccxx/cxpython) [https://github.com/oudream/hello-cmake](https://github.com/oudream/hello-cmake)를 참조하십시오. //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() <<