C++ is a famous, high-level programming language with long history of 40 years. We have explored about its tools, software, syntax and terms in the last article. Today, we will look into some of its well-known libraries.
C++ has grown a lot of libraries that are extremely useful for real-world system development. However, since it is not a new language, and it has a large community in stack, there are many libraries you can make use of, so choosing the right ones can be quite a challenge.
In this article, we will not go deep into the libraries themselves, but to introduce you to the ones that are important enough to know about. Now, let’s see what they are.
When you mention The C++ standard library, of course you will immediately think about STL, right? As a part of the standardization of the C++ language, it is not only the language but also a standard library that is provided with the supporting of the International Organization for Standardization (ISO). Here is the current status of C++ and its libraries directly from https://isocpp.org/std/status
Let’s talk about the FileSystem library. It provides facilities for performing operations on file systems and their components like paths, directories, and regular files. It was an experimental library in C++14, but becomes a part of the standard library in C++17. To make it clearer, the namespace is no longer std::experimental::filesystem, but std::filesystem. You should use facilities provided by the standard library as the behavior is well defined in all different platforms where C++ is supported.
So, what about STL? Standard Template Library is a subset of the standard library that deals with containers, iterators, and algorithms. STL is a generic library that provides solutions to managing collections of data with modern and efficient algorithms.
The next library on the list will be Boost. You should know that the standard FileSystem library was based on the Boost FileSystem library. There are many other instances where Boost libraries were adopted to the C++ standard library. We think that this proves to you about the quality of Boost.
Boost is a free and open-source peer-reviewed library distributed under a very permissive Boost Software License. It is a set of well-recognized C++ libraries, by various authors, that contain packages of code for the purpose of supporting linear algebra, pseudorandom number generation, multithreading, image processing, regular expressions, string and text processing, and unit testing.
This library also has downside, which is a steep learning curve (just like C++ itself) because it’s large and complex. Linking to Boost will increase your executable size.
POCO C++ libraries are powerful cross-platform C++ libraries designed specifically for ease of use and performance. POCO stands for Portable Components which fits the functionality it offers: building network-centric, and internet-based portable applications. Due to its modular design POCO library is well suited for embedded development (in industries such as IoT, automotive, security, Industrial automation and so on). As for licensing, they have an open-source version which is licensed under Boost software license 1.0. They also have a pro version that is subscription-based which has a commercial source code license. You can download POCO from GitHub.
OpenSSL is the Swiss army knife for cryptography. It includes general-purpose full-strength cryptographic routines in its libcrypto component and implementation of all TLS protocols in its libssl component. It is a C library but it is so important in cryptographic applications.
This library is famous for a bug called Heartbleed. It’s rare case that a library gets notice by the world by a bug, and has its own webpage. You can read all about it here.
FFmpeg is the library for the purpose of any audio and video processing. In addition to the command line executable ffmpeg, the project also includes a set of high-quality libraries for functions like encoding and decoding for audio/video codecs, demuxers and muxers for multimedia container formats, media filters, image scaling, and color space format conversion operations among others. It is a free and open-source library distributed under the GNU LGPL V2.1 license.
SQLite is a C-language library that implements a full-featured, self-contained, ACID-compliant SQL database engine. It is the most used database engine in the world and hence is a very important library you should know. The source code of SQLite is in the public domain and is free for use for everyone for any purpose! This is a unique library usually compiled into the client application through a single source code file called an amalgamation.
Dear ImGui is a great graphical user interface library for C++ as can be seen from the number of applications using it here. It is fast, portable, render agnostic, and self-contained. Its design goals are simplicity and productivity which makes it particularly suited for game engines, real-world 3-D applications, full screen, and embedded applications. It is open source under a free and permissive license and is available for download through this link.
JSON for modern C++ is a single header library for working with JSON in C++. It has an intuitive syntax and a permissive MIT license. Since this is a header only library and implemented in a single json.hpp header file, the integration with this library is trivial.
A lot of C++ programmers prefer Google Test for unit testing. GoogleTest is an open-source, well-maintained xUnit test framework, and library for C++. It includes a mocking framework which is great for shift left scenarios.
If you had a chance to work with the MQTT protocol in C++, you would have used Eclipse Mosquitto. MQTT is a lightweight and efficient protocol that requires minimal resources and hence suitable for low-power devices like small microcontrollers. The architecture of MQTT is publish/subscribe with MQTT clients talking to an MQTT broker. The Eclipse Mosquitto library is available here and has utilities for both publishers and subscribers.
There are many C++ libraries for image manipulation and computer vision, but nothing matches the versatility of OpenCV. It features a real-time computer vision, machine learning, and deep learning library for face recognition, object detection, and 3-D model extraction. It is a well-established and well-maintained library with a permissive open-source Apache license.
The Threading Building Blocks library developed by Intel is now open-sourced and renamed as oneAPI Threading Building Blocks (oneTBB). It lets you write parallel C++ programs that take full advantage of modern multicore processors that are portable, composable, and future-proof. It has a very permissive open-source Apache 2.0 license and you can check it out here.
Tensorflow is a well-known framework written in C++ for machine learning, we bet that you know about it. It includes excellent C++ libraries for doing many of the common tasks encountered in developing a machine learning model. It was originally developed by researchers in the Google Brain team working on problems in machine learning and deep neural networks. It has a very permissive open-source Apache 2.0 license and is available here.
Of course there are many other great libraries for C++ that are not mentioned here (such as GTK+, WxWidgets, Vulcan, ATL, JUCE, HandBrake, etc.). However, this list is the top picks that cover many fields. Whether you are in need of GUI, machine learning, math, audio, common classes or anything else, you can find one library here.
At iRender, we provide multiple GPUs for renting with state-of-the-art RTX3090. Our remote machines are Optimized for Scientific Computing, Machine Learning, Deep Learning.
We support not only C++, but also other programming languages such as: Python, Java, R, and many IDEs and libraries like above.
This is our packages tailored for AI/ Deep Learning:
Plus, at iRender, we provide you more support than just those hardware.
If 24GB VRam is not enough for your project, we always have NVLink to help you access more than that. You can access this article to know how to set up NVLink on our machine.
iRender offers a powerful and free file transfer tool: Gpuhub Sync. With fast file transfer speed, large data capacity, and completely free. You can transfer all the necessary data into our Gpuhub Sync tool at any time without connecting to the server. The data will be automatically synchronized in the Z drive inside the server, ready for you to use.
Besides hourly rental, you can always save from 10% to 20% with our Fixed Rental feature. For those who’s in need of a server for more than a day, or have extremely large projects, we advise to choose a daily/ weekly/monthly rental package. The discount is attractive (up to 10% for daily packages, 20% on weekly and monthly packages), and you don’t have to worry about over-charging if you forget to shutdown the server.
Users can access our web-based online platform and use multiple nodes to render at the same time. Hence, with us, it does not matter where you are present – as long as you are connected to the internet, you can access and enjoy the 24/7 rendering services that we provide, and if you meet any issue, our real human 24/7 support team is always ready to support you.
With these advantages and no hidden cost when using our machine, we believe it’s worth trying your project. You can create an account via this link to experience our service. And don’t hesitate to contact us via WhatsApp: (+84) 916806116 for advice and support.
Thank you & Happy Training!
Source: Dori Exterman - incredibuild.com