Forum: Mikrocontroller und Digitale Elektronik C++ mit Borland C++ 5.2 für 80186 Kern (DSTni)


von MrRingZero (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.