Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Problems importing libraries to my c++ project, how to fix this?

Tags:

c++

ide

I'm using the <XZY> IDE to compile my program, and have some trouble to import/integrate a specific library with it.

I get error messages like

fatal error: 3rdPartyLib.h: No such file or directory

for a

#include "3rdPartyLib.h"

statement

ld.exe: cannot find `lib3rdParty.a`

for specifying

3rdParty

in the additional libraries

At least I got some error message like

undefined reference to `lib3rdParty::foo()'

What can I do to fix this?

like image 926
πάντα ῥεῖ Avatar asked Jul 12 '14 18:07

πάντα ῥεῖ


People also ask

How do I add an external C++ library to my project?

How to Add an External C++ Library to Your Project Using the Visual Studio IDE. Step 1: Go to the website of the library. Step 2: Download the zip file that contains all the code. Step 3: Unzip the zip file to your computer.

Can I use CPP library in C?

If the C++ compiler provides its own versions of the C headers, the versions of those headers used by the C compiler must be compatible. Oracle Developer Studio C and C++ compilers use compatible headers, and use the same C runtime library. They are fully compatible.

What is import library in C++?

An import library (. lib) file contains information the linker needs to resolve external references to exported DLL functions, so the system can locate the specified DLL and exported DLL functions at run time. You can create an import library for your DLL when you build your DLL.


2 Answers

It's a common misconception, that the current IDE used, is responsible for getting errors like stated in the question.
See for example

  • c++ lib in two same project ,one can work but the other can 't
  • Issue linking libxml++ and glib libraries with CodeBlocks IDE for C++ Windows
  • ...

The problem is almost never related to the currently used IDE.
In the most cases the solution boils down, to supply the actual toolchain's compiler/linker with the appropriate path's to search for included headers, to be linked libraries.

One of the major applicable answers for the linker related problems are

  • What is an undefined reference/unresolved external symbol error and how do I fix it?
  • undefined reference to `WinMain@16'

Most of the common IDEs provide features to configure this for a specific project. Here are some samples


Eclipse-CDT

Include path settings: enter image description here

Library & library search path settings enter image description here


Visual Studio 2013

enter image description here


Code Blocks enter image description hereenter image description here


**DEV C++ (Bloodshed C++)

As from their FAQ:

9. How can i use the OpenGL library and others ?

All the libraries that comes with Mingw reside in the Lib directory. They are all named in the following way: lib*.a To link a library with your project, just add in Project options, Further option files :
-lopengl32
This is for including the libopengl32.a library. To add any other library, just follow the same syntax: Type -l (L in lowercase) plus the base name of the library (filename without lib and the .a extension).

You may also consider putting a -L option there to add directory pathes searched for libraries.


Qt Creator

In order to add include paths you have to open up the .pro file and then add the directories to the INCLUDEPATH variable. These paths are separated by spaces. Reference can be found here.

Showing INCLUDEPATH


If none of the above samples applies for your actually used IDE/toolchain, I hope you're able to get the point of abstraction:

It's an issue how to provide compiling/linking options to your actual toolchain. The IDE used to setup the context is a minor point here.

like image 121
8 revs, 2 users 92% Avatar answered Sep 25 '22 04:09

8 revs, 2 users 92%


For eclipse I use the pkg-config plugin where possible:

https://marketplace.eclipse.org/content/pkg-config-support-eclipse-cdt

Failing that this configuration window:

enter image description here

like image 37
Galik Avatar answered Sep 25 '22 04:09

Galik