mikrocontroller.net

Forum: PC-Programmierung Frage zu Build Error MSVC 2019


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Vudoh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hi Leute, ich habe mir FLTK in Visual Studio 2019 eingerichtet und 
versuche nun ein erstes Testprojekt mit ein paar zusätzlichen externen 
Headers zum Laufen zu bringen allerdings schlägt der build Vorgang fehl 
und ich kann mit den Fehlermeldungen nichts anfangen. Eine wäre zB diese 
hier:

1>GUI.obj : error LNK2005: “class std::mersenne_twister_engine & __cdecl 
get_rand(void)” 
(?get_rand@@YAAAV?$mersenne_twister_engine@I$0CA@$0CHA@$0BIN@$0BP@$0JJAI 
LANP@$0L@$0PPPPPPPP@$06$0JNCMFGIA@$0P@$0OPMGAAAA@$0BC@$0GMAHIJGF@@std@@X 
Z)  ist bereits in Graph.obj definiert.
1>GUI.obj : error LNK2005: “void __cdecl seed_randint(int)” 
(?seed_randint@@YAXH@Z) ist bereits in Graph.obj definiert.

Davon gibt es noch zwei weitere bezogen auf andere obj Dateien (die 
Fehlermeldungen beziehen sich nur auf die erwähnten externen Files). Was 
bedeutet das?

von Vudoh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kann keiner Hilfestellung bieten?

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Je nun, was ist an der Fehlermeldung unklar?

Mal etwas gekürzt steht da:

>GUI.obj : error LNK2005: “class std::mersenne_twister_engine & __cdecl
> get_rand(void)” ...
> ist bereits in Graph.obj definiert.

Dein Problem wird sein, daß du versuchst, "ein paar zusätzlichen 
externen Headers zum Laufen zu bringen".

Du weisst nicht, was du tust.
Wir wissen nicht, was du tun möchtest.

Also erklär das mal etwas ausführlicher.

Oliver

: Bearbeitet durch User
von Vudoh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ich weis nicht wie ich das genauer erklären soll. Mir stellt sich die 
Frage was die Fehlermeldung bedeutet und wie ich sie beheben kann. Ich 
könnte die einzelnen Headers hier posten, aber das wäre sicher nicht 
sinnvoll.

Ich will die FLTK Bibliothek in Verbindung mit ein paar externen Headers 
nurtzen, diese Headers stellen eine zusätzliche Schnittstelle zu FLTK 
dar.

von ljkaunidas (Gast)


Bewertung
1 lesenswert
nicht lesenswert
Tippe auf fehlende include guards in einer der Header Dateien.

von ljkaunidas (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oder eine C Headerdatei nicht innerhalb extern "C" in einer C++ Datei 
inkludiert.

von vn nn (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Vudoh schrieb:
> Ich
> könnte die einzelnen Headers hier posten, aber das wäre sicher nicht
> sinnvoll.

Und du meinst es ist sinnvoller, einfach gar keine Infos zu posten?

von Vudoh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
ljkaunidas schrieb:
> Tippe auf fehlende include guards in einer der Header Dateien.

ljkaunidas schrieb:
> Oder eine C Headerdatei nicht innerhalb extern "C" in einer C++
> Datei inkludiert.

Danach kann ich mal schauen danke für den Tipp.

von Vudoh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Würde sich evtl. jemand bereit erklären sich mein Visual Studio Projekt 
anzuschauen? Ich würde es per Mail schicken.

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Stell einfach dein Testprogramm als Anhang hier ein. So lang kann das ja 
nicht sein.

Oliver

von Vudoh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oliver S. schrieb:
> Stell einfach dein Testprogramm als Anhang hier ein. So lang kann das ja
> nicht sein.

Ich habe eben bemerkt, dass ich eine Datei nicht im Projekt hatte 
(window.h ist drin, es sollte aber simple_window.h drin sein), jetzt ist 
mir die Fehlermeldung etwas verständlicher, ich versuche mal ob ich es 
hinbekomme, ansonsten komme ich auf deinen Vorschlag zurück.

von Vudoh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Habe gestern einiges rumprobiert, aber nachdem ich alle Fehlermeldungen 
beseitigt habe, sind zum Schluss dieselben Meldungen gekommen wie am 
Eingang des Themas erwähnt.

Ist echt frustrierend wenn man ein Buch durcharbeitet, aber Details zur 
Nutzung der im Buch verwendeten Grafik-Schnittstelle darin nicht 
gründlich erklärt wird. Dabei ist das Buch eigentlich inhaltlich 
ziemlich gut.

Ich stelle nachher meine main.cpp rein und lade die zugehörigen headers 
hoch. Vielleicht könnt ihr mir weiterhelfen.

von Vudoh (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So nachfolgend die versprochenen Dateien.

Eine Anmerkung zu "Simple_window.h" und "Simple_window.cpp": Die 
cpp-Datei wird nicht benötigt, da die Definitionen schon in 
"Simple_window.h" enthalten sind.
Weiter sei noch gesagt, dass für dieses simple Beispiel GUI.h und 
GUI.cpp nicht benötigt werden, weil es aber in den späteren Buchkapiteln 
genutzt wird, wurden diese Datein gleich mit eingebunden. Ihr könnt 
diese gerne weglassen aus der Analyse.

Ich weis, dass ich nicht erwarten kann, dass ich da jemand reinwühlt und 
das ganze analysiert. Aber falls jemand doch Muse hat (es gibt ja Profis 
die sich in sowas relativ schnell reindenken können. Ich wünschte zu 
denen würde ich gehören!) wäre ich sehr dankbar dafür. Ich stecke im 
Buch momentan fest und würde gerne weiterkommen. Natürlich werde ich 
nicht faul rumliegen und andere um Hilfe bitten, ich werde selbst auch 
versuchen herauszufinden warum es nicht geht. Auf Wunsch lade ich mein 
ganzes VS-Projekt hier hoch, dann kann man auch die Projekteinstellungen 
prüfen, aber da sollten eigentlich keine Fehler drin sein.
/* main.cpp */

#include "Graph.h"
#include "Simple_window.h"

int main()
{
    using namespace Graph_lib;
 
    Point tl(150, 150);
    Simple_window win(tl, 600, 400, "My window");
    win.wait_for_button();
}

Die dahinter hängenden Headerdateien werde ich nicht posten sondern habe 
sie im Anhang, die sind zu lange um hier zu posten.


Folgende Abhängigkeiten liegen vor:

1)main.cpp inkludiert Graph.h
2)Graph.h inkludiert Point.h, fltk.h und std_lib_facilities.h

1)main.cpp inkludiert Simple_window.h
2)Simple_window.h inkludiert GUI.h
3)GUI.h inkludiert window.h und Graph.h

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Schau dir die Definition/Deklaration von seed_randint an, und die der 
Funktionen danach. Finde den Unterschied. Dann nimmst du dein C++-Buch, 
und versuchst zu verstehen, was da falsch ist, und warum.

Oliver

von Vudoh (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Oliver S. schrieb:
> Schau dir die Definition/Deklaration von seed_randint an, und die der
> Funktionen danach. Finde den Unterschied. Dann nimmst du dein C++-Buch,
> und versuchst zu verstehen, was da falsch ist, und warum.
>
> Oliver

Hallo Oliver, ich habe mich auch noch in anderen Foren umgehört und das 
Problem liegt genau wie du angedeutet hast daran, dass das Schlüsselwort 
"inline" fehlt. Nachdem ich die Änderungen vorgenommen habe hat alles 
sauber funktioniert.
An dieser Stelle vielen Dank für deine Hilfe, ich sagta ja, es gibt 
Profis die sich in sowas schnell reindenken können, von meiner Seite Hut 
- ab im Ernst. Darauf wäre ich von selbst wohl nicht gekommen, bin aber 
auch Anfänger. Du sprichst davon in einem C++ Buch nachzulesen, welches 
würdest du mir konkret empfehlen? Habe gelesen, dass Bücher von Meyers 
sehr gut sind.

Auf alle Fälle danke nochmal für deine Hilfestellung.

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht lesenswert
Fehlermeldungen vom linker sind eher selten. Die häufigste ist „fehlende 
Referenz“, danach kommt deine bzgl. „Schon definiert“. Wenn du 
verstanden hast, was das bedeutet, hast du was gelernt.

Oliver

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.

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