Re: g++ linking to gcc compiled libraries

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



"Frederich, Eric P21322" wrote:

> If I compile both the library and program using g++ it works fine, but
> then I can't link to the c library from c programs.
> 
> Here is the output of me trying to use g++ to link to a c library
> compiled with gcc.

Your 'cfun' was not declared 'extern "C"' which means when the
clibrary.h header is parsed as C++, the function is treated as C++ with
all that entails.  Note the error message:

> cppsource.o(.text+0x83): In function `main':
> : undefined reference to `cfun(int)'

It's complaining about not being able to find 'cfun(int)'.  If this were
C, it would have just said 'cfun' because C functions are not
decorated/mangled, but since the header was parsed as C++, the code is
calling the C++ version of the function with a mangled name that encodes
its type.

If you want your C header to be usable in C++ code you must wrap it with

#ifdef __cplusplus
extern "C" {
#endif

...

#ifdef __cplusplus
}
#endif

This is not gcc specific at all.

Brian

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux