views:

140

answers:

4

I'm trying to complie my program on Windows via Cygwin with the compilation command:

g++ ping.cpp -I./include -L./lib -lchartdir50

I'm using an API called ChartDirector which draws charts for me. I've never linked libraries this way before (usually I do it through Visual Studio) so i'm a little new to this. I've got a really large list of errors, so I won't list them all, but i'll list one just to clarify the type of linker errors i'm getting:

(.text$_ZN9BaseChartD1Ev[BaseChart::~BaseChart()]+0x4f): undefined reference to '_CBaseChart_destroy'

All of these are undefined reference to 'xxx' errors.

I've got a bunch of header files in ./include and a library called chartdir50.lib in ./lib

Whats wrong with my compilation line?

A: 

I am not sure but .lib have been compiled with Visual C++ ?

If yes I don't think it's compatible with GCC, you have to compile the library with GCC/G++ and use that file or to use a compatible binary if you don't have access to the source.

RageZ
I tried compiling it in visual studio and I had similar errors.ping.obj : error LNK2019: unresolved external symbol _CBaseChart_makeChart referenced in function "public: bool __thiscall BaseChart::makeChart(char const *)" (?makeChart@BaseChart@@QAE_NPBD@Z)
Ring
GCC 4.x will link MS object libraries.
Clifford
@Clifford: thanks for the hint
RageZ
A: 

I assuming that lib was created with gcc also.

AFAIK .lib is static library so you don't have to point it with -l compiler switch.

Just use it as another file in command line, like

g++ ping.cpp -I./include -L./lib {path to lib here}/chartdir50.lib

hth.

Linking the file with -l or specifying the full path are equivalent so that will not affect the situation.
R Samuel Klatchko
Tried it, same errors.
Ring
-l links static libraries or DLL/shared library exports it does not matter. Also GCC 4.x will link MS object libraries.
Clifford
A: 

Hi,

I never use that library before, but when I googled it, I noticed that other people trying like -lchartdir instead of -lchartdir50, so you should give it a try.

S.Mark
I tried adding the linux library "libchartdir.so.5.0.0" to ./lib/ and then changing my command line to:g++ ping.cpp -I./include -L./lib/chartdirI got the same exact errors.
Ring
A: 

Hmm... thats odd. I'm using a 64-bit system, but for some reason I tried it with the 32-bit library and it compiled. Thanks!

Ring
Your system may be 64bit, but I doubt the compiler is.
Clifford