Ich versuche auf Basis des DSTni-Prozessors eine C++ Umgebung zu etablieren und habe ein Linker-Problem. Ich verwende den Borland C++ 5.2 und eigene LIBs für den verwendeten Prozessor (Lantronix XPort). Das CPK (das ist die Entwicklungsumgebung) ünterstützt keine dynaschische Speicherverwaltung. Könnte man ja selber schreiben... Problem: Der Linker kann "new" und "delete" nicht aufgelösen, die ich mir in einem kleinen C-Modul hinzu-definiert habe. -> Siehe MAP-File <- Im MAP-File finde ich "NEW" und "DELETE". Habe schon alle Compiler-Switches ausprobiert. Den Linker habe ich auf "nicht-case-sensitiv" gestellt. Kein Erfolg. Hat jemand ne Idee für die Lösung meines Problems ? Compilerflags: CPP: -P -1 -d -O -Oc -Ol -Z -c -ms -a- C : -u- -1 -d -O -Oc -Ol -Z -c -ms -a- Linkerflags: /n /s ---- TestCpp.cpp ---- #ifdef __cplusplus extern "C" { #endif class CMyClass { public: CMyClass(int a, int b); ~CMyClass(); private: char m_Test; }; CMyClass::CMyClass(int a, int b) { } CMyClass::~CMyClass() { } #ifdef __cplusplus } #endif ---- CppSupp.c ---- int delete(void near* Ptr) { if (Ptr) return 0; return 1; } unsigned int near *new(unsigned int Size) { return (unsigned int *)0; } ----- Mapfile extrakt -------- 0000:0135 idle NEW 0000:013C idle DELETE . . 0000:014E idle cmyclass::cmyclass(int,int) 0000:0174 idle cmyclass::~cmyclass() . . Error: Undefined symbol operator delete(void near*) in module TESTCPP.CPP Error: Undefined symbol operator new(unsigned int) in module TESTCPP.CPP
Der Linker erwartet new und delete mit C++-Linkage (d.h. die Symbolnamen enthalten zusätzliche Typinformationen, die mit "name mangling" transportiert werden), Du aber stellst sie mit C-Linkage (also ohne Typinformationen) zur Verfügung. Du müsstest Dein Zusatzmodul als C++-Code übersetzen oder aber die Funktionsprototypen von new und delete explizit als extern "C" deklarieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.