Jump to content

  • Log In with Google      Sign In   
  • Create Account

FREE SOFTWARE GIVEAWAY

We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.


Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


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


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Acharis   Crossbones+   -  Reputation: 3998

Like
0Likes
Like

Posted 19 December 2012 - 07:58 AM

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.

Europe1300.eu - Historical Realistic Medieval Sim (RELEASED!)

PocketSpaceEmpire - turn based 4X with no micromanagement FB


Sponsor:

#2 BeerNutts   Crossbones+   -  Reputation: 3017

Like
1Likes
Like

Posted 19 December 2012 - 09:11 AM

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)

#3 Acharis   Crossbones+   -  Reputation: 3998

Like
0Likes
Like

Posted 19 December 2012 - 09:42 AM

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);
}

Europe1300.eu - Historical Realistic Medieval Sim (RELEASED!)

PocketSpaceEmpire - turn based 4X with no micromanagement FB


#4 Acharis   Crossbones+   -  Reputation: 3998

Like
0Likes
Like

Posted 19 December 2012 - 11:20 AM

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, 20 December 2012 - 08:27 AM.

Europe1300.eu - Historical Realistic Medieval Sim (RELEASED!)

PocketSpaceEmpire - turn based 4X with no micromanagement FB





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS