• Advertisement
Sign in to follow this  

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

This topic is 1858 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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: [i]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.[/i]

Share this post


Link to post
Share on other sites
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.

[url="http://2dgamemaking.blogspot.com/2011/10/smashpc-is-started.html"]This Link[/url] show those screen for C::B for a game I made, and it adds a few static libraries.

Good Luck

Share this post


Link to post
Share on other sites
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:

[CODE]
#include <mytestlib.h>

void something()
{
libraryfunctionname(1,1);
}
[/CODE]

Share this post


Link to post
Share on other sites
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". Edited by Acharis

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement