- นี่คือไลบรารีซอฟต์แวร์ไลบรารีข้ามแพลตฟอร์มเกี่ยวกับ c, c++, unix4, posix
- ห้องสมุดนี้ได้รับการพัฒนาอย่างต่อเนื่องมานานกว่าสามปี และทำหน้าที่เป็นผู้สนับสนุนโครงการขนาดใหญ่หลายโครงการ
- รวมการทดสอบหน่วย, การทดสอบเกณฑ์มาตรฐาน, cmake, การตรวจสอบกระบวนการ, daemon, ไลบรารีแบบอะซิงโครนัส libuv, lua, cpython, re2, json, yaml, mysql, redis, opencv, qt, lz4, oci ...
- นี่คือไลบรารีซอฟต์แวร์ไลบรารีข้ามแพลตฟอร์มเกี่ยวกับ c, c++, unix4, posix
- ห้องสมุดนี้ได้รับการพัฒนาอย่างต่อเนื่องมานานกว่าสามปี และให้การสนับสนุนขั้นพื้นฐานสำหรับโครงการขนาดใหญ่หลายโครงการ
- รวมการทดสอบหน่วย, การวัดประสิทธิภาพ, cmake, การตรวจสอบกระบวนการ, daemons, ไลบรารี async 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 เพื่อเขียนการทดสอบหน่วยเพิ่มเติม การวัดประสิทธิภาพ นักเทียบท่าในการทดสอบแบบกระจายแบบขนานของ k8
รหัสไลบรารีหลักของ ccxx อยู่ในโฟลเดอร์ ccxx ในไดเร็กทอรีราก และมีขนาดประมาณ 14MB โมดูลส่วนใหญ่ใช้ไฟล์ .cpp เพื่อทำหน้าที่ให้สมบูรณ์ และวิธีการคลาสคงที่เริ่มต้นจะถูกเรียกโดยตรง) ตัวอย่างเช่น โปรดดูไดเร็กทอรีตัวอย่างและการทดสอบ
- cxappenv.h: สภาพแวดล้อมการทำงาน (ชื่อโปรแกรมที่กำลังรัน, ไดเร็กทอรีการทำงาน, ตัวแปรสภาพแวดล้อม)
- cxinterinfo.h: ข้อมูลอินพุตและเอาต์พุตอินเทอร์เฟซของโปรแกรม การใช้งานรวมถึง: cxlog.h (log), CxConsoleInterinfo (เทอร์มินัล)
- cxfile.h: ระบบไฟล์
- cxsocket.h: การสื่อสารผ่านเครือข่าย
- cxthread.h: สัญญาณเธรด, IPC
- cxapplication.h คล้ายกับ Event Loop ใน (Node.js) กลไกสัญญาณรอใช้เพื่อสำรวจคิวเหตุการณ์และดำเนินการ ปัจจุบันมีส่วนร่วมใน Event Loop ได้แก่ (cxchannel.h, cxtimer.h) cxapplication_qt.h คือการเข้าร่วมของ Qt ใน Event Loop ของ Qt
- cxchannel.h: (สำหรับใช้งาน) เปิดเธรดอิสระสำหรับการส่ง รับ และการตรวจสอบ ข้อมูลที่ได้รับและเหตุการณ์จะถูกพุชไปยัง Event Loop ของเธรดหลัก ดังนั้นข้อมูลจึงไม่จำเป็นต้องล็อคข้ามบรรทัด การใช้งานคือ: 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, benchmark และ yaml ถูกวางไว้อันดับที่ 3
- openssl และ curl เพิ่มไลบรารีโดยใช้ไฟล์ส่วนหัว
- c++ call python(callpython)(./ccxx/sample/callpython), python call c++(cxpython)(./ccxx/ccxx/cxpython) อ้างถึง https://github.com/oudream/hello-cmake
- โค้ดตัวอย่างอย่างเป็นทางการของ opencv รวมอยู่ใน cmake แล้วและสามารถคอมไพล์เพื่ออำนวยความสะดวกในการทดสอบ
รหัสไลบรารีหลักของ ccxx อยู่ในโฟลเดอร์ ccxx ในไดเร็กทอรีราก (ประมาณ 14MB) โมดูลส่วนใหญ่ใช้ไฟล์ .cpp เพื่อทำหน้าที่ให้สมบูรณ์ และวิธีการคลาสคงที่เริ่มต้นจะถูกเรียกโดยตรง สำหรับตัวอย่าง โปรดดูที่ ไดเร็กทอรีของตัวอย่างและการทดสอบ
- cxappenv.h: สภาพแวดล้อมการทำงาน (ชื่อโปรแกรมรัน, ไดเร็กทอรีการทำงาน, ตัวแปรสภาพแวดล้อม)
- cxinterinfo.h: ข้อมูลโปรแกรมอินพุตและเอาต์พุตอินเทอร์เฟซ: cxlog.h (log), CxConsoleInterinfo (terminal)
- cxfile.h: ระบบไฟล์
- cxsocket.h: การสื่อสารผ่านเครือข่าย
- cxthread.h: สัญญาณเธรด, IPC
- cxapplication.h คล้ายกับ Event Loop ใน (Node.js) กลไกสัญญาณรอใช้ในการสำรวจและดำเนินการคิวเหตุการณ์ ที่เข้าร่วมในปัจจุบัน (cxchannel.h, cxtimer.h) ลูปเหตุการณ์ที่ Qt เข้าร่วมใน Qt
- cxchannel.h: (ต้องการอินสแตนซ์เพื่อใช้) เปิดเธรดแยกต่างหากเพื่อส่งและรับและตรวจสอบ รับข้อมูลและเหตุการณ์ที่พุชไปยัง Event Loop ของเธรดหลัก ดังนั้นข้อมูลจึงไม่จำเป็นต้องถูกล็อคข้ามบรรทัด : 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, benchmark, ซอร์สโค้ดของ yaml เองถูกจัดให้อยู่ในอันดับที่ 3
- openssl, curl เป็นไฟล์ส่วนหัวพร้อมไลบรารี
- c++ call python (callpython) (./ccxx/sample/callpython), python call 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 : ยกเว้น 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
# ...
สิ่งที่ต้องทำ: CxDatabase::loadSql : ถ้านับจำนวนที่โหลด > ผลตอบแทนสูงสุด
สิ่งที่ต้องทำ: เพิ่มช่อง libuv
สิ่งที่ต้องทำ: ออกหรือส่งสัญญาณ: ฟังก์ชันการกลับเข้าใหม่ เช่น CxLog() <<