Forum: PC-Programmierung boost asio in QT läuft nicht wegen lib


von asio (Gast)


Lesenswert?

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ß

von Rolf M. (rmagnus)


Lesenswert?

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.

von asio (Gast)


Lesenswert?

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?

von SkyperHH (Gast)


Lesenswert?

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

von asio (Gast)


Lesenswert?

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.

von Georg A. (georga)


Lesenswert?

Hat denn qmake überhaupt ein 64bit-Setup erzeugt?

von asio (Gast)


Lesenswert?

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?

von asio (Gast)


Lesenswert?

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

von Rolf M. (rmagnus)


Lesenswert?

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.

von asio (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.