002
27.04.2005, 08:43 Uhr
ao
(Operator)
|
Gibts in der mylib.h folgendes Konstrukt?
C++: |
#ifdef __cplusplus extern "C" { #endif
int function1 (); /* oder wie auch immer der Prototyp aussieht */
#ifdef __cplusplus } #endif
|
Wenn ja: Das sagt dem C++-Compiler, dass die Funktionen aus diesem Modul mit C-Namenskonvention aufgerufen werden sollen und dass das C++-Name-Mangling abgeschaltet werden soll. Das darf nur dann sein, wenn der dahinterliegende Quelltext (hier mylib.cpp) auch wirklich mit dem C- (nicht C++)-Compiler übersetzt wird.
Also:
Wenn mylib.cpp C++-mäßig übersetzt wird, darf mylib.h die #ifdef ... #endif-Konstrukte nicht enthalten.
Wenn die C-Namensgebung gewollt ist, dann bringe den Compiler dazu, mylib im C-Modus zu übersetzen: mylib.cpp nach mylib.c umbenennen oder die Compileroption anwenden, die bcc32 zwingt, mylib.cpp trotz der .cpp-Extension als C zu übersetzen (könnte das -p oder -P- oder was ähnliches sein?
ao |