How to include a static library in Code::Blocks?

Started by
2 comments, last by Acharis 11 years, 4 months ago
I wrote a trivial library (one function to return a sum of 2 integers). Made a "library" type project, compiled it and got a nice libraryname.a file. So far so good.

Now to include it to my main project. Eons ago I was using Watcom and there I would just add .lib (I understand Code::Blocks names these .a but that's the same beast) and .h files to the project and that's it. Tried it with Code::Blocks and it's not working for some reason. First I got a new target "namelibrary" in addition to standard "debug + release" when I tried to add the .a file, which is suspicious, I don't need any new target... When I try to build the project I'm getting some error (which instantly disappears before I can read it, I don't know how to enable it to be not disappearing, normal errors just stay there after failed build attempt; that's the next question BTW, how to enable it)?

I suspect in Code::Blocks I should use some linker setting instead of adding the .a file to the project?


Note: This is a crossplatform project and leter I will use C::B to produce executables for Linux and Mac as well, I don't know if there is any difference how it works on these system (assuming I'm using C::B on all of them) but in case there is, please warn me.

Stellar Monarch (4X, turn based, released): GDN forum topic - Twitter - Facebook - YouTube

Advertisement
Hi,

You need to setup the project. There should be a menu option for setting up the "Project Build Options". In the Project Build options screen, there is a linker section and a search directory section. You need to add the library into the Linker section, and possibly also in the search directory section.

This Link show those screen for C::B for a game I made, and it adds a few static libraries.

Good Luck

My Gamedev Journal: 2D Game Making, the Easy Way

---(Old Blog, still has good info): 2dGameMaking
-----
"No one ever posts on that message board; it's too crowded." - Yoga Berra (sorta)

I'm getting "undefined reference to 'libraryfunctionname(int,int)' ".

What I did:
1) Project build options - Search Directory - Complier : Set the path to the library project folder (root, since it contains the .a file)
2) Project build options - Search Directory - Linker : Set the path to the library project folder (root, since it contains the .h file)
3) Project build options - Linker Settings : Set the path to the library project's .a file (root\libraryname.a)

I did all this for the "project name" so it is inherited by both Debug & Release, also removed the previous .a file I added to the project manually and deleted the additional (libraryname) target. Then I used the code as follows:


#include <mytestlib.h>

void something()
{
libraryfunctionname(1,1);
}

Stellar Monarch (4X, turn based, released): GDN forum topic - Twitter - Facebook - YouTube

OK, now the weird thing, I downloaded LUA sources and made a library out of it, then added it exactly as above. It works!

Next, I created a simple library myself from scratch (in case I messed up with the first one somehow) and added it, again, exactly as above (we are talking about minutes time difference, I'm sure I clicked everything identical way). It is not working :)

How come? :D



The full souce code of my library:

main.c
---------
int lib2(int a,int b)
{
return a+b;
}
---------

mylib2.h
---------
int lib2(int a,int b);
---------



EDIT: Solved, it required extern "C".

Stellar Monarch (4X, turn based, released): GDN forum topic - Twitter - Facebook - YouTube

This topic is closed to new replies.

Advertisement