mikrocontroller.net

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


Autor: MrRingZero (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.