Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using C Libraries for C++ Programs

Tags:

c++

c

robotics

I am trying to control Dynamixel servos using a GUI made using Qt. Dynamixel provides a C set of C libraries to control the motors, while the only way of making GUI's I know is Qt, which is essentially C++. Will it be possible to use Dynamixel C libraries from Qt C++ code in any way?

like image 332
johngreen Avatar asked Aug 22 '12 04:08

johngreen


People also ask

Can you use libraries in C?

Functions in a C library can be used and accessed by programmers to create several different programs. As a programmer, you may find yourself using the same function or functions repeatedly. In this case, it is best to put this function or functions in a library to speed up the compilation of the program.

What is libraries in C programming?

A library in C is a collection of header files, exposed for use by other programs. The library therefore consists of an interface expressed in a . h file (named the "header") and an implementation expressed in a . c file.

Can you use C without libraries?

Then the compiler is smart enough to resolve the import dependencies and compile your program. If you disassemble the program, you can see only your code is there, there is no standard library bloat in it. So you can use C without the standard library.

What is the C standard library used for?

The C standard library provides macros, type definitions and functions for tasks such as string handling, mathematical computations, input/output processing, memory management, and several other operating system services.


2 Answers

Yes, C++ can compile C with a C++ compiler and you can link C++ against C. Just be sure that any C function you call uses C linkage. This is made by enclosing the prototype of the C function by an extern "C"

#ifdef __cplusplus extern "C"{ #endif   void c_function_prototype();  #ifdef __cplusplus } #endif 

The headers for the library you are trying to use may already do that.

like image 138
André Oriani Avatar answered Oct 02 '22 17:10

André Oriani


Sure ... C code is called from C++ all the time. For instance, most OS libraries are written in C rather than C++. So whenever you're making syscalls from your C++ code to perform tasks that are handed over to the OS kernel, those are going through C-code calls.

Just be sure to include the proper headers and link against the C-libraries in question at compile time. Also remember to use extern "C" to specify C-linkage for the C-library functions if the header files have not already declared them as such. Keep in mind that some libraries may not have declared their functions specifically using extern "C", but may have used a pre-processor token to-do so. So you'll want to check for that as well before you assume the library writers did not already define their library as having C-linkage.

linking custom libraries using gcc can be done with the -l switch. If you need to specify a custom directory for where the libraries are located, that can be done with the -L switch. So for instance:

g++ -std=c++11 my_code.cpp -lmy_library -L/custom_directory_path 

Note that the -l and -L switches come after the code or object files you're compiling, and if you're library is something like libjpg, or librobotics, etc., drop the lib part of the name when you append it to the -l switch.

like image 37
Jason Avatar answered Oct 02 '22 16:10

Jason