Hallo, seit gestern kämpfe ich um boost asio auf QT zu nutzen. (Ich weiß das QT selbst auch Netzwerkdinge bietet aber ich möchte bewusst asio). Eckdaten: Windows, QT 5.8.0 MSVC2015_64bit Angeblich sind wohl die meißten Libs von boost "Header-Only Libraries". Alle Versuche nur mit #include <boost/asio.hpp> die Sache zum laufen zu bringen sind gescheitert. Es kommt der Fehler: LNK1104: Datei "libboost_system-vc140-mt-gd-1_64.lib" kann nicht geöffnet werden. Soviel zu "Header Only". Dann habe ich bootstramp.bat ausgeführt und dann b2.exe um libs zu erstellen, mit der Hoffnung das damit was geht. In der .pro Datei vom QT Projekt steht nun: TEMPLATE = app CONFIG += console c++11 CONFIG -= app_bundle CONFIG -= qt SOURCES += main.cpp LIBS += -L"C:/boost_1_64_0/boost/stage/lib/" LIBS += -libboost_system-vc140-mt-gd-1_64 INCLUDEPATH += C:/boost_1_64_0/ habe etliche Varianten probiert aber es kommt immer weiter der Fehler: LNK1104: Datei "libboost_system-vc140-mt-gd-1_64.lib" kann nicht geöffnet werden. Die besagte Datei existiert und befindet sich unter C:/boost_1_64_0/stage/lib Auch wenn ich den Ordner oder die Datei direkt in das Projekt einbinde geht es nicht. (Dann steht in der .pro noch DISTFILES += \ lib-namen...) Hat jemand eine Idee? Gruß
asio schrieb: > Angeblich sind wohl die meißten Libs von boost "Header-Only Libraries". > Alle Versuche nur mit #include <boost/asio.hpp> die Sache zum laufen zu > bringen sind gescheitert. > Es kommt der Fehler: LNK1104: Datei > "libboost_system-vc140-mt-gd-1_64.lib" kann nicht geöffnet werden. > Soviel zu "Header Only". Dass die meiSten header-only sind, bedeutet eben nicht, dass es grundsätzlich immer so ist. Boost.Asio selbst ist header-only, hat aber Abhängigkeiten von anderen Boots-Libs, die es nicht sind. Es lohnt sich, im Handbuch den Abschnitt "Dependencies" unter "Using Boost.Asio" zu lesen. > LIBS += -L"C:/boost_1_64_0/boost/stage/lib/" > LIBS += -libboost_system-vc140-mt-gd-1_64 Das sieht mir nicht wie passende Kommandozeilenparameter für den Visual-Studio-Compiler aus, sondern eher wie welche für GCC, und auch dann wäre ein Fehler drin. Laut boost-Doku müsste es eher sowas sein wie /LIBPATH:C:\boost_1_64_0\boost\stage\lib. Die zweite Zeile kann man wohl ganz weglassen.
Danke für die Rückmeldung, leider klappt es so auch nicht. Der Compiler ist zwar MSVC2015_64bit aber in der .pro Datei muss man glaube ich auch wie von QT vorgesehen schreiben. Auch einige Varianten von stackoverflow hab ich geprüft zB https://stackoverflow.com/questions/16998326/how-do-i-use-the-boost-libraries-in-a-qmake-project oder http://doc.qt.io/qt-5/third-party-libraries.html Bin da echt Ratlos. Beim build von boost (bootstramp.bat / b2.exe) hatte ich einfach ausgeführt und die Dateien wurden erstellt und entsprechen den richtigen Dateinamen. Kann es sein, dass beim Build irgendwelche wichtigen Konfigurationen übergeben werden müssen oder das bei QT noch ausser bei der .pro Datei noch was gemacht werden muss?
Lösche mal alle Lib-Einträge in Deiner .pro-Datei und gehe dann oben in der Ecke Wo der Projektname steht (darunter ist die .pro-Datei) im Qt Creator und dort, rechte Maustaste "Add Library" ... dann einfach durchklicken.... Ich hatte es auch händisch versucht und bin mit ähnlichen Fehlermeldungen gescheitert, über den Wizard lief es dann. Sieht danach dann so aus: win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../qtservice/lib/ -lQt5Daemon INCLUDEPATH += $$PWD/../qtservice/src/daemon DEPENDPATH += $$PWD/../qtservice/src/daemon
Danke diesen Weg hatte ich noch nicht probiert. Habe nun als externe Bibliothek die Sache durchgeführt. Als Bibliotheksdatei die libboost_system-vc140-mt-gd-1_64.lib und als include-pfad den Pfad wo diese Datei drin ist. Habe es statisch und dynamisch probiert, leider funktioniert es so auch nicht und weiterhin der Fehler LNK1104: Datei "libboost_system-vc140-mt-gd-1_64.lib" kann nicht geöffnet werden.
Also mit Programmieren komme ich wesentlich besser zurecht als die Grundlage dafür zu schaffen :-) qmake müsste stimmen. Also Das Kit nennt sich "Desktop QT 5.8.0 MSVC2015_64bit (Vorgabe)" Unter Compiler steht "Microsoft Visual C++ Compiler 14.0 (amd64)" Also nochmal ganz von vorne: - Neues Projekt erstellt, reine c++ Anwendung. - Kit: Desktop QT 5.8.0 MSVC2015_64bit - Dann unter Projekte häckchen weg bei "Shodow build" (finde das immer merkwürdig) - Dann in der .cpp #include <boost/asio.hpp> - Dann in der .pro INCLUDEPATH += C:/boost_1_64_0/ -asio.hpp LIBS += -L"C:\boost_1_64_0\stage\lib" Und jetzt ist es interessant geworden. Neue Fehler von denen 3 Stück lauten: LNK4272:Bibilothekcomputertyp "X86" steht in Konflikt mit dem Zielcomputertyp "x64" C:\boost_1_64_0\stage\lib\libboost_system-vc140-mt-gd-1_64.lib Was bedeutet das?
das Vorig beschriebene tritt auf beim Release... und beim debug kommt: C1083: Datei(Include) kann nicht geöffnet werden: "boost/asio.hpp": No such file or directory Ist doch alles sehr merkwürdig
asio schrieb: > Und jetzt ist es interessant geworden. Neue Fehler von denen 3 Stück > lauten: LNK4272:Bibilothekcomputertyp "X86" steht in Konflikt mit dem > Zielcomputertyp "x64" Ich würde jetzt vermuten, dass heißt, dass du eine 64-Bit-Anwendung bauen willst, aber eine 32-Bit-Version von Boost hast.
Ich hatte nochmal alles neu gemacht und das neuste QT installiert und boost neu gebaut und dann ging es wieder nicht. Verrückt und jetzt geht es nach einer trivialen Änderung. Es lag daran, dass das Projekt auf einer anderen Festplatte gespeichert ist als die boost Bibliothek. Warum das ein Problem ist kann ich zwar nicht Nachvollziehen aber Hauptsache es geht nun. Ich habe den QT Projektordner auf die gleiche Platte wo boost liegt gelegt und plötzlich funktioniert alles. Vielen Dank für die Ideen, dann wäre die Sache geklärt. Gruß
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.