C/C++ Language

January 16th, 2019

Common

C Language

C++ Language

C++ Language – C++11

C++ Language – C++17

STL

C++ – Study – Lectures

C++ compilers

IDE and Compilers

  • Pocket C++
  • Low Level Virtual Machine(LLVM tag)
  • Low Level Virtual Machine (wikipedia)
  • Low Level Virtual Machine (LLVM)
  • clang: a C language family frontend for LLVM
  • LLVM Language Reference Manual
  • MinGW – a contraction of “Minimalist GNU for Windows”, is a port of the GNU Compiler Collection (GCC), and GNU Binutils, for use in the development of native Microsoft Windows applications.
  • MinGW-w64 – GCC for both x64 & x86 Windows!
  • lcc-win: A Compiler system for windows by Jacob Navia (a retargetable compiler for ANSI C). (Book)
  • pcc –  the Portable C Compiler
  • TDM-GCC is a compiler suite for Windows. It combines the most recent stable release of the GCC toolset with the free and open-source MinGW or MinGW-w64 runtime APIs to create a Libre alternative to Microsoft’s compiler and platform SDK.
  • CINT is an interpreter for C and C++ code. It is useful e.g. for situations where rapid development is  more important than execution time. Using an interpreter the compile and link cycle is dramatically reduced facilitating rapid development. CINT makes C/C++ programming enjoyable even for part-time programmers.
  • SDCC – Small Device C Compiler
  • Tiny C Compiler – You can compile and execute C code everywhere, for example on rescue disks (about 100KB for x86 TCC executable, including C preprocessor, C compiler, assembler and linker). Tcc generates x86 code. No byte code overhead. Compile, assemble and link several times faster than GCC. Any C dynamic library can be used directly. TCC is heading torward full ISOC99 compliance. TCC can of course compile itself. Tcc includes an optional memory and bound checker. Bound checked code can be mixed freely with standard code. Compile and execute C source directly. No linking or assembly necessary. Full C preprocessor and GNU-like assembler included. C script supported. With libtcc, you can use TCC as a backend for dynamic code generation.
  • Ch is an embeddable C/C++ interpreter for cross-platform scripting, shell programming, 2D/3D plotting, numerical computing, quick animation, and embedded scripting. Ch is a free and user-friendly alternative to C/C++ compilers for beginners to learn C/C++
  • EiC project – this is a resurrected open source C Interpreter project. The new release includes enhancements that allows the C Interpreter to talk to logic simulation so that it can be used to drive simulation. This project bridges Software and logic simulation.

STL – Boost

Algorithms

Source

  • Zeef – Awesome list of C++ resources
  • CCAN – nice snippets of C code should be moved out of junkcode directories and exposed to a wider world, where they can become something useful. CCAN is loosely modelled after the successful CPAN project for Perl code development and sharing.
  • sources.ru
  • The Code Project
  • Koders.com is a free on-line search engine for open source software and other web-downloadable Code

Libraries – C

  • single-file public domain libraries for C/C++
  • Liblfds, a portable, license-free, lock-free data structure library written in C. Lock-free data structures are process, thread and interrupt safe (i.e. the same data structure instance can be safely used across processes, threads and both inside and outside of interrupt handlers), never sleep (and so are safe for kernel use when sleeping is not permitted), operate without context switches, cannot fail (no need to handle error cases, as there are none), perform and scale literally orders of magnitude better than locking data structures, and liblfds itself (as of release 7.0.0) is implemented such that it performs no allocations and compiles not just on a freestanding C89 implementation, but on a bare C89 implementation.

Libraries

  • A list of open source C++ libraries (cppreference.com)
  • Flux is a library of odds and ends related to data storage and indexing, marshalling, transfer, compression and encryption. It also features a slew of utility functions for various purposes. It is written in C, using the GLib paradigm.
  • DispHelper is a COM helper library that can be used in C++ or even plain C. No MFC or ATL required! It allows you to call COM objects with a printf style syntax. Included with DispHelper are over 20 samples demonstrating using COM objects from ADO to WMI.
  • Libsmbios is a cross-OS library intended to be used to obtain common information available in BIOS using a unified application programming interface (API). Currently, it can programmatically access any information in the SMBIOS tables. It also has the ability to obtain Dell system-specific information such as the Dell System ID number, service tag, and asset tag. Future plans include APIs for $PIR, and mptable mapping.
  • fuse-zip is a FUSE file system to navigate, extract, create and modify ZIP archives based in libzip implemented in C++. With fuse-zip you really can work with ZIP archives as real directories. Unlike KIO or Gnome VFS, it can be used in any application without modifications.
  • VOLE – A Neat C++ COM/Automation Driver. VOLE is an open-source C++ library that dramatically simplifies the business of driving COM servers (via the IDispatch interface) from C++.
  • Portable Components (POCO) C++ Libraries are a collection of Open Source C++ class libraries that simplify and accelerate the development of network-centric, portable applications in C++. The libraries integrate perfectly with the C++ Standard Library and fill many of the functional gaps left open by it. Their modular and efficient design and implementation makes the POCO C++ Libraries extremely well suited for embedded development, an area where the C++ programming language is becoming increasingly popular, due to its suitability for both low-level (device I/O, interrupt handlers, etc.) and high-level object-oriented development. Of course, the POCO C++ Libraries are also ready for enterprise-level challenges. (see articles section also)

Libraries – STL

Libraries – Single instruction, multiple data (SIMD)

  • Numerical Template Toolbox (NT²) – is an open source C++ library aimed at easing the development of high-performance numerical computing applications on a wide range of architectures ranging from embedded systems to large-scale clusters. It does so with a high-level MATLAB(R)-like syntax, which facilitates the transition from prototype to finished product without having to deal with the specificities of the hardware target.
  • C++ vector class library – this is a collection of C++ classes, functions and operators that makes it easier to use the the vector instructions (Single Instruction Multiple Data instructions) of modern CPUs without using assembly language. Supports the SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AVX2, AVX512, FMA, and XOP instruction sets. Includes standard mathematical functions.

Libraries – parallel programming

  • Thread Safe Template Library (TSTL) is a C++ library that provides thread-safe containers with high grade of locking. It includes classes for multimaps based on a B-tree and a hash table. It also includes classes for a queue, a priority queue, a pipe, an alloccache, a timercache, a limitcache without global locking, and a fast shared mutual exclusion locker (also known as “rwlock” or “wmrg”). It’s useful for writing multi-threaded applications, network services, and operating system components with high requirements for interactivity level.
  • CUDA™ is a parallel computing platform and programming model invented by NVIDIA. It enables dramatic increases in computing performance by harnessing the power of the graphics processing unit (GPU).
  • OpenCL – the open standard for parallel programming of heterogeneous systems. OpenCL™ is the first open, royalty-free standard for cross-platform, parallel programming of modern processors found in personal computers, servers and handheld/embedded devices. OpenCL (Open Computing Language) greatly improves speed and responsiveness for a wide spectrum of applications in numerous market categories from gaming and entertainment to scientific and medical software.
  • The OpenACC Application Program Interface describes a collection of compiler directives to specify loops and regions of code in standard C, C++ and Fortran to be offloaded from a host CPU to an attached accelerator, providing portability across operating systems, host CPUs and accelerators.

Libraries – OpenMP

Libraries – Messaging

  • Asynchronous Agents Library – use the Agents library when you have multiple operations that must communicate with one another asynchronously. Message blocks and message-passing functions let you write parallel applications without requiring synchronization mechanisms such as locks. This lets you focus on application logic.
  • C++ Actor Framework (GitHub) – an open source C++11 actor model implementation featuring lightweight & fast actor implementations, pattern matching for messages, network transparent messaging, and more.

Libraries – Regular Expression

  • PCRE – Perl Compatible Regular Expressions
  • VerbalExpressions is a C++11 Header library that helps to construct difficult regular expressions.

Libraries – GLib

Libraries – Strings

  • The C++ String Toolkit Library (StrTk) consists of robust, optimized and portable string processing algorithms for the C++ language. StrTk is designed to be easy to use and integrate within existing code bases. Furthermore the library has a rich set of features that makes light work of any kind of string processing task.
  • The Better String Library
  • cstring – C-style string definition and manipulation library
  • FastFormat – the best C++ output/formatting library you’ll ever use.
  • Trio – portable and extendable printf and string functions. Trio is a fully matured and stable set of printf and string functions designed be used by applications with focus on portability or with the need for additional features that are not supported by standard stdio implementation.
  • b64 – Base-64 Encoding Library (C library with C++ mapping; Platform-independent)
  • libb64 is a library of ANSI C routines for fast encoding/decoding data into and from a base64-encoded format. C++ wrappers are included, as well as the source code for standalone encoding and decoding executables.
  • ICU is a mature, widely used set of C/C++ and Java libraries providing Unicode and Globalization support for software applications. ICU is widely portable and gives applications the same results on all platforms and between C/C++ and Java software.
  • UTF8-CPP: UTF-8 with C++ in a Portable Way
  • concat  – a string concatenation utility in a single header file for C++11.

Libraries – Crypto

  • Crypto++ Library –  is a free C++ class library of cryptographic schemes. (GitHub)
  • Botan, a friendly C++ crypto library
  • Libecc is an elliptic curve crypto library for C++ developers. It is currently in development.
  • Win32 OpenSSL
  • Comparison of TLS Implementations. The Transport Layer Security (TLS) protocol provide the ability to secure communications across networks. There are several TLS implementations which are free and open source software and sometimes choosing between the available implementations can be tough. Below, you will find a side-by-side comparison of several of the most prominent libraries.
  • PolarSSL is an SSL library written in ANSI C. PolarSSL makes it easy for developers to include cryptographic and SSL/TLS capabilities in their (embedded) products with as little hassle as possible. It is designed to be readable, documented, tested, loosely coupled and portable.  (not free)
  • MatrixSSL is an embedded SSL and TLS implementation designed for small footprint applications and devices. AuthenTec offers a fully supported, commercial version as well as an open source version that is available for download. MatrixSSL allows secure management of remote devices. Several secure embedded Web servers also use MatrixSSL for their encryption layer. (not free)
  • The CyaSSL embedded SSL library is a lightweight SSL library written in ANSI C and targeted for embedded and RTOS environments – primarily because of its small size, speed, and feature set.  It is commonly used in standard operating environments as well because of its royalty-free pricing and excellent cross platform support.  CyaSSL supports industry standards up to the current TLS 1.2 level, is up to 20 times smaller than OpenSSL, and offers progressive ciphers such as HC-128, RABBIT, and NTRU.  User benchmarking and feedback reports dramatically better performance when using CyaSSL over OpenSSL.  (not free)

Libraries – Command Line

  • CLAP is a C++ package that enables a programmer to define and parse command line arguments easily.
  • TCLAP is a small, flexible library that provides a simple interface for defining and accessing command line arguments. It was intially inspired by the user friendly CLAP libary. The difference is that this library is templatized, so the argument class is type independent. Type independence avoids identical-except-for-type objects, such as IntArg, FloatArg, and StringArg. While the library is not strictly compliant with the GNU or POSIX standards, it is close.

Libraries – Standard algorithms

Libraries – Compression

  • compression.ru – задачей сайта является сбор и публикация материалов в области сжатия данных. На сервере расположены фрагменты книги “Методы сжатия данных”, вышедшей в 2002 году, более 1030 статей по сжатию и исходные тексты более 50 компрессоров.
  • The Data Compression Information Source
  • LZHAM (LZ, Huffman, Arithmetic, Markov) is a general purpose lossless data compression library that borrows many ideas from LZMA but purposely makes several key tradeoffs that favor decompression speed over compression ratio. LZHAM’s compression ratio is currently approximately .5-1.5% less than LZMA, but decompresses approximately 2-3x faster on a Core i7.
  • zlib – a massively spiffy yet delicately unobtrusive compression library (manual)
  • LZO is a portable lossless data compression library written in ANSI C.
  • FreeArc is a modern general-purpose archiver. Main advantage of FreeArc is fast but efficient compression and rich set of features.
  • Open Source H.264 Codec – демонстрирует компрессию до 13% для видеороликов H.264 и 22% на произвольных файлах JPEG
  • heatshrink: A data compression/decompression library for embedded/real-time systems (GitHub)

Libraries – Debug

  • DebugView++ – started as a viewer for Win32 OutputDebugString messages in the style of Sysinternals DebugView. However, it can now be attached to virtually any other kind of logging, such as: tailing ascii and UTF logfiles (just drag it onto the window); Android ADB (or any console based standard output); serial ports (using plink); sockets, telnet or ssh ports (also using plink); it can listen for UDP messages, handy in distributed systems.
  • Visual Leak Detector
  • memwatch – a memory leak detection tool. Basically, you add a header file to your souce code files, and compile with MEMWATCH defined or not. The header file MEMWATCH.H contains detailed instructions.
  • Tracey is a lightweight and simple C++11 memory leak finder with no dependencies.

Libraries – SQL

  • SQLite
  • hiberlite – C++ Object-relational mapping for sqlite3. C++ object-relational mapping with API inspired by the Boost.Serialization – that means almost no API to learn. In contrast to most serialization libraries with SQL serializers, C++ objects mapped with hiberlite behave similar to active record pattern – you are not forced to follow the “read all your data/modify some small part/write everything back” path. For people who need reliable data storage, ACID transactions, simple random-access to their data files, and don’t like coding in SQL.
  • ODB is an object-relational mapping (ORM) system for C++. It allows you to persist C++ objects to a relational database without having to deal with tables, columns, or SQL, and manually writing any of the mapping code. ODB natively supports SQLite, PostgreSQL, MySQL, Oracle, and Microsoft SQL Server. Pre-built packages are available for GNU/Linux, Windows, Mac OS X, and Solaris. Supported C++ compilers include GCC, MS Visual C++, Sun CC, and Clang.
  • OTL – Oracle, ODBC and DB2-CLI Template Library. OTL 4.0 is a C++ library based on C++ templates.

Libraries – Logging

  • G3log is an asynchronous, “crash safe”, logger that is easy to use with default logging sinks or you can add your own. G3log is made with plain C++11 with no external libraries (except gtest used for unit tests). G3log is made to be cross-platform, currently running on OSX, Windows and several Linux distros. See Readme below for details of usage.
  • spdlog – super fast, header only, C++ logging library.
  • Pantheios is an Open Source C/C++ Diagnostic Logging API library, offering an optimal combination of 100% type-safety, efficiency, genericity and extensibility. It is simple to use and extend, highly-portable (platform and compiler-independent) and, best of all, it upholds the C tradition of you only pay for what you use.
  • CMCrashReporter is a free and open-source framework written in Cocoa which developers can stick in their applications to allow the user to easily send a crashlog back to the developer.

Libraries – Multiplatform

  • JUCE is a wide-ranging C++ class library for building rich cross-platform applications and plugins for all the major operating systems. Having been actively developed since 2003, it is used by thousands of developers around the world, and JUCE-based apps are used by millions of people every day. JUCE has hundreds of classes covering a vast range of tasks from high-level user-interface handling right down to low-level collections, networking, strings, etc. Supported platforms are OSX, Windows, Linux, iOS and Android, and the Introjucer project management tool makes it a breeze to maintain cross-platform projects.
  • LibU – is a multiplatform C library which comes under a BSD-style license. It includes many interdependent modules for accomplishing several tasks: memory allocation, networking and URI parsing (rfc2396), string manipulation, debugging and logging in a very compact way, plus many other miscellaneous tasks.
  • commonc++ is a C++ class library for developing cross-platform systems software for POSIX systems (GNU/Linux, Mac OS X, Solaris) and Windows (Visual Studio or GNU toolchain via MinGW). It provides C++ wrappers for common operating system facilities like threads, mutexes, semaphores, sockets, shared memory, regular expressions, filesystem access, etc., as well as abstractions for strings, buffers, object pools, timers, logging, and more.
  • dlib C++ library – is a general purpose cross-platform C++ library designed using contract programming and modern C++ techniques. It is open source software and licensed under the Boost Software License.
  • Openframeworks is a c++ library designed to assist the creative process by providing a simple and intuitive framework for experimentation. The library is designed to work as a general purpose glue, and wraps together several commonly used libraries under a tidy interface: openGL for graphics, rtAudio for audio input and output, freeType for fonts,freeImage for image input and output, quicktime for video playing and sequence grabbing.
  • UNIXem: UNIX Emulation Library for Win32
  • recls – recursive ls – the platform-independent recursive search library
  • shwild is a simple, platform-independent, library that implements shell-compatible wildcard pattern matching. It is implemented in C/C++, expressing a C-API, with a C++ wrapper
  • The ADAPTIVE Communication Environment (ACE) is a freely available, open-source object-oriented (OO) framework that implements many core patterns for concurrent communication software. ACE provides a rich set of reusable C++ wrapper facades and framework components that perform common communication software tasks across a range of OS platforms. The communication software tasks provided by ACE include event demultiplexing and event handler dispatching, signal handling, service initialization, interprocess communication, shared memory management, message routing, dynamic (re)configuration of distributed services, concurrent execution and synchronization.
  • Portable Dynamic Loader (PDL) project – C++ Portable Dynamic Loader A small and lightweight library for creating and using dynamically loaded classes in C++. Common interface works on both Windows and Unix/Linux platforms.
  • Apache Portable Runtime(APR)

Libraries – Math

  • Elemental is open-source, openly-developed, software for distributed-memory dense and sparse-direct linear algebra and optimization which supports a wide range of functionality not available elsewhere. (GitHub)
  • Eigen is a C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

Libraries – UI

  • Nana – is a C++ library designed to allow developers to easily create cross-platform GUI applications with modern C++11 style, currently it can work on Linux(X11) and Windows (GitHab). Nan0-demo is collection of small examples barrowed from any possible source, mostly from documents and blogs posted by Jin Hao.
  • Sciter – (is a superset of HTMLayout and works on Windows, Mac OS X and Linux). Embeddable HTML/CSS/script engine for modern UI development.
  • HTMLayout – (is not supported anymore) fast, lightweight and embeddable HTML/CSS renderer and layout manager component. (HTMLayout Wiki)
  • GTK+. gtkmm is the official C++ interface for the popular GUI library GTK+
  • BCGSoft – Professional GUI for professional applications. BCGControlBar Professional is an MFC extension library that allows you to create the most advanced user interfaces in the world. It combines an easy to use and very powerful feature set implemented by highly customizable collection of MFC extension classes.
  • wxWidgets is a C++ library that lets developers create applications for Windows, OS X, Linux and UNIX on 32-bit and 64-bit architectures as well as several mobile platforms including Windows Mobile, iPhone SDK and embedded GTK+.
  • Ultimate++ is a C++ cross-platform rapid application development framework

Libraries – Graphics

  • SVG++ library can be thought of as a framework, containing parsers for various SVG syntaxes, adapters that simplify handling of parsed data and a lot of other utilities and helpers for the most common tasks.
  • Simple DirectMedia Layer (SDL) is a cross-platform multimedia library designed to provide low level access to audio, keyboard, mouse, joystick, 3D hardware via OpenGL, and 2D video framebuffer. It is used by MPEG playback software, emulators, and many popular games, including the award winning Linux port of “Civilization: Call To Power.”
  • GraphicsMagick is the swiss army knife of image processing. Comprised of 282K physical lines (according to David A. Wheeler’s SLOCCount) of source code in the base package (or 952K including 3rd party libraries) it provides a robust and efficient collection of tools and libraries which support reading, writing, and manipulating an image in over 88 major formats including important formats like DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM, and TIFF. Image processing may be multi-threaded using OpenMP so that CPU-bound tasks scale linearly as processor cores are added. OpenMP support requires compilation with GCC 4.2 (or later), or use of any C compiler supporting at least the OpenMP 2.0 specification.
  • ImageMagick is a software suite to create, edit, and compose bitmap images. It can read, convert and write images in a variety of formats (over 100) including DPX, EXR, GIF, JPEG, JPEG-2000, PDF, PhotoCD, PNG, Postscript, SVG, and TIFF. Use ImageMagick to translate, flip, mirror, rotate, scale, shear and transform images, adjust image colors, apply various special effects, or draw text, lines, polygons, ellipses and Bezier curves.
  • Clutter is an open source (LGPL 2.1) software library for creating fast, compelling, portable, and dynamic graphical user interfaces. It is a core part of MeeGo, and is supported by the open source community. Its development is sponsored by Intel.
  • OpenCV (homepage, wiki) – (Open Source Computer Vision Library) is an open source computer vision and machine learning software library. OpenCV was built to provide a common infrastructure for computer vision applications and to accelerate the use of machine perception in the commercial products. The library has more than 2500 optimized algorithms, which includes a comprehensive set of both classic and state-of-the-art computer vision and machine learning algorithms. These algorithms can be used to detect and recognize faces, identify objects, classify human actions in videos, track camera movements, track moving objects, extract 3D models of objects, produce 3D point clouds from stereo cameras, stitch images together to produce a high resolution image of an entire scene, find similar images from an image database, remove red eyes from images taken using flash, follow eye movements, recognize scenery and establish markers to overlay it with augmented reality, etc. OpenCV has more than 47 thousand people of user community and estimated number of downloads exceeding 5 million. The library is used extensively in companies, research groups and by governmental bodies. OpenCV шаг за шагом.
  • The CImg Library is a small, open source, C++ toolkit for image processing. (article: Краткое описание библиотеки CImg)
  • libjpeg-turbo is a JPEG image codec that uses SIMD instructions (MMX, SSE2, AVX2, NEON, AltiVec) to accelerate baseline JPEG compression and decompression on x86, x86-64, ARM, and PowerPC systems, as well as progressive JPEG compression on x86 and x86-64 systems. libjpeg-turbo implements both the traditional libjpeg API as well as the less powerful but more straightforward TurboJPEG API. libjpeg-turbo was originally based on libjpeg/SIMD, an MMX-accelerated derivative of libjpeg v6b developed by Miyasaka Masaru. (GitHub)
  • Guetzli is a JPEG encoder that aims for excellent compression density at high visual quality. Guetzli-generated images are typically 20-30% smaller than images of equivalent quality generated by libjpeg. Guetzli generates only sequential (nonprogressive) JPEGs due to faster decompression speeds they offer.

Libraries – Media

  • FFmpeg is a complete, cross-platform solution to record, convert and stream audio and video. It includes libavcodec – the leading audio/video codec library.
  • MediaInfo supplies technical and tag information about a video or audio file. It is free software (free of charge and free access to source code: GPL or LGPL licence)
  • libVLC– you can embed libVLC into your application to gain audio/video playing features.
  • TagLib is a library for reading and editing the meta-data of several popular audio formats. Currently it supports both ID3v1 and ID3v2 for MP3 files, Ogg Vorbis comments and ID3 tags and Vorbis comments in FLAC, MPC, Speex, WavPack TrueAudio, WAV, AIFF, MP4 and ASF files.
  • libsoundio is a lightweight abstraction over various sound drivers. It provides a well-documented API that operates consistently regardless of the sound driver it connects to. It performs no buffering or processing on your behalf; instead exposing the raw power of the underlying backend. libsoundio is appropriate for games, music players, digital audio workstations, and various utilities.

Libraries – XML

  • Libxml2 is the XML C parser (Windows port)
  • Xerces-C++ is a validating XML parser written in a portable subset of C++. Xerces-C++ makes it easy to give your application the ability to read and write XML data. A shared library is provided for parsing, generating, manipulating, and validating XML documents using the DOM, SAX, and SAX2 APIs.
  • TinyXML is a simple, small, minimal, C++ XML parser that can be easily integrating into other programs. It reads XML and creates C++ objects representing the XML document. The objects can be manipulated, changed, and saved again as XML.
  • LibAxl (or just Axl) is an implementation of the XML 1.0 standard specification, developed by the ASPL people to support many of its XML software requirements.
  • RapidXml is an attempt to create the fastest XML parser possible, while retaining useability, portability and reasonable W3C compatibility. It is an in-situ parser written in modern C++, with parsing speed approaching that of strlen function executed on the same data.

Libraries – JSON

Libraries – Parsers

  • libConfuse is a configuration file parser library, licensed under the terms of the ISC license, and written in C. It supports sections and (lists of) values (strings, integers, floats, booleans or other sections), as well as some other features (such as single/double-quoted strings, environment variable expansion, functions and nested include statements). It makes it very easy to add configuration file capability to a program using a simple API.
  • Open-RJ is an open-source library that implements readers of the Record-Jar structured text file format. It is implemented in C & C++, with a C-API. The implementation of the basic library is platform-independent. In addition to platform-independence, the library focuses on small runtime costs – memory and speed – and the classic UNIX attributes of discoverability and visibility.

Libraries – Network

  • libcurl – libcurl is a free and easy-to-use client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP. libcurl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form based upload, proxies, cookies, user+password authentication (Basic, Digest, NTLM, Negotiate, Kerberos), file transfer resume, http proxy tunneling and more!
  • The C++ Network Library Project. The project aims to build upon the latest C++ standard (currently C++11) to provide easy to use libraries for network programming. We use the latest compiler versions and features with an eye on pushing the boundaries on leveraging what’s available in C++.
  • libssh2 is a client-side C library implementing the SSH2 protocol
  • OMQ is a new layer in the networking stack, a scalability layer that spreads the load of a distributed system so that it can support arbitrarily large applications. OMQ defines the overall topology of the distributed system rather than simple point-to-point communication. 0MQ applications are concurrent without locks, and elastic over any number of threads, cores, and boxes.
  • Mongrel2 is an application, language, and network architecture agnostic web server that focuses on web applications using modern browser technologies.
  • GNU libmicrohttpd is a small C library that is supposed to make it easy to run an HTTP server as part of another application.
  • POCO – modern, powerful open source C++ class libraries and frameworks for building network- and internet-based applications that run on desktop, server and embedded systems.
  • protobuf – Protocol Buffers are a way of encoding structured data in an efficient yet extensible format. Google uses Protocol Buffers for almost all of its internal RPC protocols and file formats.
  • Seasocks is a simple-to-use, lightweight, embeddable C++ library that implements HTTP and websockets. It has a simple way of serving static content and even some dynamic content, but its main raison d’etre is for websocket-based command and control. (blog)
  • libtins is a high-level, multiplatform C++ network packet sniffing and crafting library. Its main purpose is to provide the C++ developer an easy, efficient, platform and endianess-independent way to create tools which need to send, receive and manipulate network packets.

Libraries – Social

  • twitcurl is a pure C++ library for twitter APIs. twitcurl uses cURL for handling HTTP requests and responses. twitcurl has been tested on Microsoft Windows, Ubuntu and Debian. In fact, it works just fine on any operating system that supports cURL.

Libraries – Web

  • CAS – C++ Application Server
  • The Chromium Embedded Framework (CEF) is an open source project to develop a Web browser control based on the Google Chromium project. The base framework includes C and C++ programming interfaces exposed via native libraries that insulate the host application from Chromium and WebKit implementation details. It provides close integration between the browser control and the host application including support for custom plugins, protocols, JavaScript objects and JavaScript extensions. The host application can optionally control resource loading, navigation, context menus, printing and more, while taking advantage of the same performance and HTML5 technologies available in the Google Chrome Web browser.
  • Rikitiki – a C++ Web Module Library. Rikitiki is a project aimed at adding developer convenience to writing web server modules. It provides integration into mongoose and apache, and contains easy to configure and use routing functionality. Optionally, it includes support for the ctemplates library as a templating engine.

Libraries – Other

  • Shed Skin is an experimental compiler, that can translate pure, but implicitly statically typed Python programs into optimized C++. It can generate stand-alone programs or extension modules that can be imported and used in larger Python programs.
  • GUP –  is a Generic Updater running under Windows environment. The aim of GUP is to provide a ready to use and configurable updater which downloads a update package then installs it. By using cURL library and TinyXml module, GUP is capable to deal with http protocol and process XML data.
  • V8 JavaScript Engine.
  • PoDoFo is a library to work with the PDF file format. The name comes from the first letter of PDF (Portable Document Format). A few tools to work with PDF files are already included in the PoDoFo package.
  • libusb.info – libusb A cross-platform user library to access USB devices
  • libusb – a library that gives user level applications uniform access to USB devices across many different operating systems.
  • The OGR Simple Features Library is a C++ open source library (and commandline tools) providing read (and sometimes write) access to a variety of vector file formats including ESRI Shapefiles, S-57, SDTS, PostGIS, Oracle Spatial, and Mapinfo mid/mif and TAB formats.

Bridge – Scripting Engines

Android

  • Android++ – a native development and debugging solution for Visual Studio. Android++ is a freely distributed tool to simplify the creation of Android applications from within Visual Studio. It is designed primarily to support native development and debugging within a industry-standard IDE.

Microsoft relating

TDD (Test-driven development)

  • Google C++ Mocking Framework
  • Google C++ Testing Framework (googletest) – Google’s framework for writing C++ tests on a variety of platforms (Linux, Mac OS X, Windows, Cygwin, Windows CE, and Symbian). Based on the xUnit architecture. Supports automatic test discovery, a rich set of assertions, user-defined assertions, death tests, fatal and non-fatal failures, value- and type-parameterized tests, various options for running the tests, and XML test report generation.
  • Slideshare: Test driven development in C
  • boost::test

Tools

  • CMake – the cross-platform, open-source build system
  • SCons is an Open Source software construction tool—that is, a next-generation build tool. Think of SCons as an improved, cross-platform substitute for the classic Make utility with integrated functionality similar to autoconf/automake and compiler caches such as ccache. In short, SCons is an easier, more reliable and faster way to build software.
  • Stunnix C++ Obfuscator is an advanced tool for making C and C++ source code difficult to understand and adapt. It’s useful for cases when source code needs to be shipped without fear of intellectual property theft or illegal code reuse.
  • CScout is a source code analyzer and refactoring browser for collections of C programs.

Tools – Unit Tests

  • UnitTest++ is a lightweight unit testing framework for C++. It was designed to do test-driven development on a wide variety of platforms. Simplicity, portability, speed, and small footprint are all very important aspects of UnitTest++. UnitTest++ is free software. The license is the same as the MIT/X Consortium license. UnitTest++ is ANSI portable C++ and makes minimal use of advanced library and languages features, which means it should be easily portable to just about any platform. Out of the box, the following platforms are supported: Win32, Linux, Mac OS X.
  • Catch – a modern, C++-native, header-only, framework for unit-tests, TDD and BD.
  • CxxTest is a unit testing framework for C++ that is similar in spirit to JUnit, CppUnit, and xUnit. CxxTest is easy to use because it does not require precompiling a CxxTest testing library, it employs no advanced features of C++ (e.g. RTTI) and it supports a very flexible form of test discovery.

Tools – Profilers

  • Intel® VTune™ Performance Analyzer evaluates applications on all sizes of systems based on Intel® processors, from embedded systems through supercomputers, to help you improve application performance. VTune Performance Analyzer makes application performance tuning easier and is indispensable for making your software run its fastest on the latest single and multicore systems.
  • Valgrind is an award-winning instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management and threading bugs, and profile your programs in detail. You can also use Valgrind to build new tools. It runs on the following platforms: X86/Linux, AMD64/Linux, PPC32/Linux, PPC64/Linux, and X86/Darwin (Mac OS X).
  • OProfile is a system-wide profiler for Linux systems, capable of profiling all running code at low overhead. OProfile is released under the GNU GPL.
  • Coverity Prevent for C/C++ – optimize software integrity and decrease development time with the most precise static source code analysis solution available today. Coverity Prevent for C/C++ automatically identifies and helps resolve the most critical quality defects, security vulnerabilities and concurrency defects at the earliest stage in the software development cycle. It is the product of choice for developers who demand flexibility, maturity and accuracy in source code analysis. Prevent helps development teams ensure the integrity of the critical software code they deliver by automating the defect discovery process at the earliest stage of the production lifecycle.
  • Bullseye Coverage – quickly find untested C++ code and measure testing completeness.
  • OpenGrok is a fast and usable source code search and cross reference engine. It helps you search, cross-reference and navigate your source tree. It can understand various program file formats and version control histories like Mercurial, Git, SCCS, RCS, CVS, Subversion, Teamware, ClearCase, Perforce, Monotone and Bazaar. In other words it lets you grok (profoundly understand) the open source, hence the name OpenGrok. It is written in Java.
  • Klocwork – provides source code analysis tools that boost development productivity. Over 700 organizations use Klocwork‘s static analysis technology to identify security vulnerabilities and quality defects, optimize their peer code review process, and enable developers to create more maintainable code.
  • Likwid is a simple to install and use toolsuite of command line applications for performance oriented programmers. It works for Intel and AMD processors on the Linux operating system.
  • Test programs for measuring clock cycles and performance monitoring -test programs that I have used for my research. Can measure clock cycles and performance monitor counters such as cache misses, branch mispredictions, resource stalls etc. in a small piece of code in C, C++ or assembly. Can also set up performance monitor counters for reading inside another program. Supports Windows and Linux, 32 and 64 bit mode, multiple threads.
  • Micro benchmarking libraries for C++ .
  • CppBenchmark – C++ Benchmark Library allows to create performance benchmarks of some code to investigate average/minimal/maximal execution time, items processing processing speed, I/O throughput. CppBenchmark library has lots of features and allows to make benchmarks for different kind of scenarios such as micro-benchmarks, benchmarks with fixtures and parameters, threads benchmarks, produsers/consummers pattern.

Tools – Code review

  • List of tools for static code analysis
  • Artistic Style – A Free, Fast and Small Automatic Formatter for C, C++, C#, and Java Source Code
  • Vera++ – Programmable verification and analysis tool for C++
  • Splint is a tool for statically checking C programs for security vulnerabilities and coding mistakes. With minimal effort, Splint can be used as a better lint. If additional effort is invested adding annotations to programs, Splint can perform stronger checking than can be done by any standard lint.

Tools – Code analysing

  • Cppcheck – is an static analysis tool for C/C++ code. Unlike C/C++ compilers and many other analysis tools it does not detect syntax errors in the code. Cppcheck primarily detects the types of bugs that the compilers normally do not detect. The goal is to detect only real errors in the code (i.e. have zero false positives).
  • Visual Lint is Riverblade’s solution for developers who require advanced static code analysis capabilities within the Microsoft Visual Studio and eMbedded Visual C++ integrated development environments.

IDE

  • LLDB is a next generation, high-performance debugger. It is built as a set of reusable components which highly leverage existing libraries in the larger LLVM Project, such as the Clang expression parser and LLVM disassembler. LLDB is the default debugger in Xcode on Mac OS X and supports debugging C, Objective-C and C++ on the desktop and iOS devices and simulator.
  • VMKit: a substrate for virtual machines. The VMKit project is a framework for building virtual machines. It uses LLVM for compiling and optimizing high-level languages to machine code, and MMTk to manage memory. J3 is an implementation of a JVM with VMKit. You can get and build the source of J3 today.
  • The KLEE Symbolic Virtual Machine. KLEE is a symbolic virtual machine built on top of the LLVM compiler infrastructure, and available under the UIUC open source license.
  • C-Free is a professional C/C++ integrated development environment (IDE) that support multi-compilers. Use of this software, user can edit, build, run and debug programs freely.
  • Code::Blocks is a free C++ IDE built to meet the most demanding needs of its users.
  • VisualDDK – develop/debug drivers directly from VS
  • Eclipse

Articles

Comments are closed.