On 2 Oct 2011, at 14:54, Mariwan wrote:
> HI,
> I have a problem in linking some .o object to the executable file in linux
> (fedora).
> com.o uiciname.o uici.o restart.o are written in c and I use gcc to compile
> them.
> but client.o is a fltk program. and I use g++ to compile it.
> here is the out put of the make:
>
> g++ -o Client client.o com.o uiciname.o uici.o restart.o
> -L/usr/X11R6/lib -L/usr/local/lib -lX11 -lfltk -lfltk_images -lm -lXpm
> -lpng -lz -ljpeg
> client.o: In function `main':
> client.cxx:(.text.startup+0x3bb): undefined reference to
> `connectToServer(char const*, unsigned short, char const*, char const*)'
> client.cxx:(.text.startup+0x3e8): undefined reference to
> `stratChatReceiving(int*, char*)'
> client.cxx:(.text.startup+0x49f): undefined reference to
> `startChatSending(int*, char const*)'
> collect2: ld returned 1 exit status
> make: *** [Client] Error 1
>
> These functions are defined with extern .. still it is not helping to solve
> the problem..
> It seems that gcc and g++ have different format in the object files .. that
> is why the linker (g++) will not find the reference in the objects that were
> compiled by gcc. Dose that mean that I should make a library for the gcc
> outputs?
> Any idea is appreciated.
The calling conventions used by C and C++ are not the same, so you can not
directly call C++ functions from C programs, or vice versa.
However, it is very easy to call C functions from C++, you just need to ensure
that you put an extern "C" {...} around the definitions of the C functions you
want to call from your C++ code.
So, for example, in your C++ code, you might have...
extern "C" {
int my_C_function(void);
int my_other_C_function(int param);
// etc...
}
And then the C++ code will be able to call (and link correctly to) the C
functions.
Calling C++ code is trickier, so your best bet is to make a C++ function that
is explicitly compiled with C linkage.
That will be callable from your C code, and will be able to call other C++
methods. But calling C++ methods directly from C code is not going to work...
This might help...
http://www.parashift.com/c++-faq-lite/mixing-c-and-cpp.html#faq-32.6
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk