boost asio in QT läuft nicht wegen lib

Gast #5100275
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.
Gast
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?
Gast
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
Gast
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.
Gast
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?
Gast
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.
Gast
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ß

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.