LNK2001 bei boost::exception

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Jonathan
Establishment
Beiträge: 2660
Registriert: 04.08.2004, 20:06
Kontaktdaten:

LNK2001 bei boost::exception

Beitrag von Jonathan »

Ich bin grad mal wieder auf einem "ich hasse C++ Trip" weil ich komische Fehler hab, die ich absolut nicht einsehen kann.

Ich möchte für mein Projekt boost::exception und boost::lexical_cast benutzen. Damit ich nicht Boost komplett als Abhängigkeit habe, hab ich bcp benutzt und den Output davon für exception und lexical cast zusammen kopiert.
Interessanterweise hat es da noch nicht kompiliert, ich musste zusätzlich noch den config/user Ordner mitkopieren (was das nun wieder sollte, wer weiß)

Gut, ich kann mein Projekt jetzt also kompilieren, aber jedes mal, wenn ich irgendwo was mit exceptions mache, kriege ich einen Linkerfehler:
Fehler 5 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl boost::throw_exception(class std::exception const &)" (?throw_exception@boost@@YAXABVexception@std@@@Z)" in Funktion ""void __cdecl boost::exception_detail::throw_exception_<class Exception>(class Exception const &,char const *,char const *,int)" (??$throw_exception_@VException@@@exception_detail@boost@@YAXABVException@@PBD1H@Z)".
Da zum Beispiel schon, wenn ich nur lexical_cast benutze, der ja eine Exception schmeißen könnte. Aber auch ohne lexical_cast kriege ich Linkerfehler, sobald ich exceptions benutze. Jetzt hab ich den selben, zusammenkopierten, boostordner mal für ein Testprojekt benutzt und dort geht alles wunderbar.

Jetzt bin ich ziemlich ratlos, weil wohl irgendwas mit meinem Projekt nicht stimmen kann, ich aber keinerlei Anhaltspunkte mehr habe, was ich noch überprüfen könnte. Besonders doof ist halt, dass es im Testprojekt geht, in meinem aber nicht, obwohl ich da in den entsprechendne cpp Dateien auch nix anderes mache, als ein paar Standardheader einzubinden und zu benutzen. Und in den Projektoptionen hab ich auch nix boost spezifisches gemacht, außer das Include Verzeichnis für boost zu setzen...
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
dot
Establishment
Beiträge: 1746
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: LNK2001 bei boost::exception

Beitrag von dot »

Naja offenbar hast du die notwendige boost Library nicht gleinked?
Benutzeravatar
Jonathan
Establishment
Beiträge: 2660
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: LNK2001 bei boost::exception

Beitrag von Jonathan »

Es ist eine Header-only Bibliothek.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: LNK2001 bei boost::exception

Beitrag von Krishty »

Dann hast du die Header nicht eingebunden, in denen die Funktionen definiert sind.

Hast du eigentlich mittlerweile herausgefunden, warum Assimp nicht kompilieren wollte?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2660
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: LNK2001 bei boost::exception

Beitrag von Jonathan »

Dann hast du die Header nicht eingebunden, in denen die Funktionen definiert sind.
Tjo, man bindet eigentlich imemr nur die boost/exception/all.hpp ein, und genau so hats im anderen Projekt ja auch funktioniert. Und nein, mit Assimp bin ich noch nicht weiter. :(

Das Projekt wurde mit CMake erstellt. Ich habe jetzt nochmal alles, was mit boost zu tun hatte rausgeschmissen und werfe nur einmal eine std::exception, die ich fange. Das Compiliert zwar, aber ich bekomme komische Warnungen:
Warnung 3 warning C4530: C++-Handler verwendet, aber Entladesemantik ist nicht aktiviert. Geben Sie /EHsc an. C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\xlocale 323
Die hab ich 4 mal. Ich hab keine Ahnung, was die Meldung bedeuten soll, oder wo sie herkommt (hier mal die CMakeList.txt: http://pastebin.com/Mnd9uM2c) aber es hat ja offensichtlich mit Exceptions zu tun. Kann mir jemand was dazu sagen?
Achja: Um auszuschließen, dass es was mit diesem bcp zu tun hat, hab ich mal meine Haupt boost Installation benutzt. Der Fehler kommt schon, sobald ich nur boost/lexical_cast.hpp einbinde, und überhaupt gar nix mit boost::exceptions mache. Sehr dubios, das alles.
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Benutzeravatar
Krishty
Establishment
Beiträge: 8350
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: LNK2001 bei boost::exception

Beitrag von Krishty »

Ist es denn dasselbe Projekt wie mit Assimp? Wenn ja, würde ich die Projektdateien nochmal aufsetzen, entweder von Null oder vom funktionierenden Testprojekt ausgehend.

Die Warnung bedeutet: Du hast im Compiler Stack Unwinding deaktiviert; d.h. Ausnahmen werden zwar noch gefangen, aber es werden keine Destruktoren aufgerufen. Du musst mit /EHsc kompilieren.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Jonathan
Establishment
Beiträge: 2660
Registriert: 04.08.2004, 20:06
Kontaktdaten:

Re: LNK2001 bei boost::exception

Beitrag von Jonathan »

[edit]Nein, es ist nicht das Assimp Projekt[/edit]
[edit2]Ah, dann scheint es echt alle anderen Flags zu überschreiben. War wohl keine gute Idee, irgendwelche CMakeBefehle zu benutzen, die man nicht wirklich verstanden hat[/edit2]

Okaaaaaay...

Wenn ich in der CMakeList.txt das hier
# enable multi processor compiling
SET(CMAKE_CXX_FLAGS
"/MP"
)
auskommentiere, und /MP erst in VC in den Projektoptionen setze, dann geht alles. Hm, hab ich mit dieser Zeile jetzt irgendetwas wichtiges überschrieben? Oder kann mir jemand sagen, wieso das Probleme mit den Exceptions macht? Ich meine das Problem scheint gelöst, aber ich hasse es, so unbefriedigende Antworten zu haben, und außerdem fände ich es schick, Multiprozessor Compilierung in CMake zu aktivieren (wobei man sich sicherlich fragen kann, was bei anderen Compilern als VC2010 dann passiert, vielleicht ist das doch ne doof Idee).

Ich frag mich ehrlich gesagt, wie ich den Fehler gefunden habe oO :D
Lieber dumm fragen, als dumm bleiben!
https://jonathank.de/games/
Darian
Beiträge: 2
Registriert: 01.12.2011, 22:20
Alter Benutzername: Darian

Re: LNK2001 bei boost::exception

Beitrag von Darian »

Also ich habe das selbe Problem wenn ich cmake mit Boost Testings zum Laufen kriegen will.
Bist du da schon weiter bekommen?
CMake mit normalen Projekt funktioniert. Testings ohne CMake funktionieren, aber beides gemeinsam, geht natürlich nicht...

Ich halte dich am Laufendem sobald ich was weiß....ist aber schon ziemlich lästig das ganze :-)

lg Darian
Antworten