简体   繁体   中英

Mixing C and C++ code yields unexpected behavior in GCC

I use legacy C-Code in my current C++ project by including external headers:

extern "C" {
# include "ANN/ANN_4t70P1.h"
# include "ANN/ANN_4t70P2.h"
# include "ANN/ANN_4t70P3.h"
# include "ANN/ANN_4t70P4.h"
}

The header files look like this:

extern int ANN_4t70P1(float *in, float *out, int init);

static struct {
  int NoOfInput;    /* Number of Input Units  */
  int NoOfOutput;   /* Number of Output Units */
  int(* propFunc)(float *, float*, int);
} ANN_4t70P1REC = {8,3,ANN_4t70P1};

The C-Code is created by an ancient batch-file and cannot be compiled using C++ compilers. Nevertheless, this implementation works fine for Windows and Mac OS. However, when I compile the code using gcc and g++ on Linux and run the application, ANN_4t70P1REC returns incorrect values.

Are there any special linker flags that I missed out when linking the project?

Thanks!

What do you mean by:

The C-Code is created by an ancient batch-file and cannot be compiled using C++ compilers

Are you linking using object files generated by different compilers? If so, try to inspect your object files with:

readelf -h <objectname>

Check if there is a different ABI. If the code is generated by a very old GCC <3.3/3.4 you can have problems linking with newer versions.

Are you sure you don't have any warnings during the link?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM