Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Compiler- und IDE-Forum ::  Einbinden von Boost in Visual C++ für Linux     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Mario86
Unregistrierter




Beitrag Mario86 Unregistrierter 11:10:21 13.09.2017   Titel:   Einbinden von Boost in Visual C++ für Linux            Zitieren

Hi.

Ich bin recht neu, was das Programmieren mit C++ betrifft, darum scheitere ich gerade an so etwas einfachem wie dem Einbinden der Boost-Bibliotheken.

Ich habe Visual Studio 2017 (Community Version) installiert und benutze dabei die Möglichkeit plattformübergreifenden Code für Linux zu compilieren (per ssh Verbindung zur Linux-Maschnine und dort mit g++ compilieren). Funktioniert soweit auch gut, solange ich die Standard-Bibliotheken benutze. Jetzt würde ich aber gern die Boost-Bibliotheken benutzen und scheitere seit 2 Tagen. Und da ich mit googlen nicht mehr weiter komme und alles probiert habe, was ich gefunden habe, hoffe ich, dass mir hier jemand helfen kann (ist mein erster Post hier, ich hoffe das ist nicht der falsche Bereich für meine Frage).

Ich erstelle ein neues Projekt Konsolenanwendung (Linux). Ich ändere an dem vorgefertigtem Projekt noch nichts außer, dass ich eine include hinzufüge. Sieht dann so aus:
C++:
1
2
3
4
5
6
7
8
#include <cstdio>
#include <boost\asio.hpp>
 
int main()
{
    printf("hello from ConsoleApplication1!\n");
    return 0;
}


Das heisst ich benutze sie noch überhaupt nicht.
Wenn ich das jetzt aber compiliere, kommt immer der Fehler:
boost\asio.hpp: No such file or directory

Habe bei den Projekteigenschaften unter C/C++ --> Allgemein --> Zusätzliche Inludeverzeichnisse D:\c_libraries\boost_1_65_1 hinzugefügt (da hab ich sie entpackt). Im Code selbst funktioniert das auch super. Wenn ich da beim include nur das boost anfange zu schreiben, gibt mir das autovervollständigen auch die entsprechenden dateien zur Wahl, also grundsätzlich erkannt hat er es offensichtlich.

Hab gedacht, vlt liegt das Problem daran, dass ich die Bibliotheken auf der Linux-Maschnine nicht installiert habe (wobei er benötigte Dateien ja eigtl vor dem compilieren allein kopieren sollte), also hab ich dort auch noch libboost-all-dev installiert, brachte aber keine Änderung.

Ich habe mittlerweile unzählige Dinge ausprobiert, die ich jetzt unmöglich alle aufzählen kann, aber irgendwo mach ich offensichtlich etwas sehr grundlegendes falsch. Ich wäre froh, wenn mir da jemand helfen kann.

Achja falls das relevant ist: Ich will keine der Bibliotheken nutzen, die man vorher extra compilieren muss um sie zu verwenden, sondern nur einige der Header-only Bibliotheken von Boost.

Bin für jeden Tipp dankbar.
MfG Mario
C++ Forumbot
Forumbot

Benutzerprofil
Anmeldungsdatum: 29.02.2004
Beiträge: 20039
Beitrag C++ Forumbot Forumbot 11:57:00 13.09.2017   Titel:              Zitieren

Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum Compiler- und IDE-Forum verschoben.

Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?


Dieses Posting wurde automatisch erzeugt.

_________________
Besuchen Sie unsere Bücherecke.
http://www.c-plusplus.de/bucher.php
Mit jeder Bestellung unterstützen Sie das Forum.
rudi994
Mitglied

Benutzerprofil
Anmeldungsdatum: 27.10.2016
Beiträge: 26
Beitrag rudi994 Mitglied 14:37:40 14.09.2017   Titel:              Zitieren

Mario86 schrieb:

D:\c_libraries\boost_1_65_1 hinzugefügt (da hab ich sie entpackt). Im Code selbst funktioniert das auch super ... autovervollständigen

Nach Entpacken der ZIP-Datei (hier unter Win7) erscheint der Ordner boost_1_65_1 zweimal hintereinander, der boost-Ordner selbst ist dann z.B. zu finden in C:\boost_1_65_1\boost_1_65_1
Bis mir das aufgefallen ist, gab es hier auch immer den Fehler 'No such file or directory'. Viel mehr kann ich zu boost nicht sagen, da ich nicht damit arbeite. Mit <boost/asio.hpp> gibt es hier auch nur Probleme, aber folg. Mini-Code ist wenigstens fehlerfrei compilierbar:
Code:
1
2
3
4
5
6
7
8
9
#include <boost/cstdlib.hpp>
#include <boost/locale.hpp>
using namespace boost::locale;
 
int main()
{
    std::cout << "Hello World!" << std::endl;
    return 0;
}
Mario86
Unregistrierter




Beitrag Mario86 Unregistrierter 10:21:22 15.09.2017   Titel:              Zitieren

Der Fehler mit der nicht gefundenen Datei scheint wohl \ statt / gewesen zu sein. Da Visual Studio das \ automatisch gesetzt hatte, hab ich darüber nicht nachgedacht, nachdem es aber mit deinem code ging und ich beim hinzufügen der asio include wieder den Fehler bekam, dass die Datei nicht vorhanden wäre, fiel mir auf, dass das autoverfollständigen <boost\asio.hpp> benutzte, während deine includes slash statt backslash nutzen.
Long story short: mit <boost/asio.hpp> bekomme ich zumindest nicht mehr den Fehler, dass die Datei nicht gefunden wird, sondern stattdessen folgende Fehler:
Zitat:
1>/home/visualstudio/projects/Asiotest/obj/x64/Debug/main.o: In function `__static_initialization_and_destruction_0':
1>/usr/include/boost/system/error_code.hpp:222: undefined reference to `boost::system::generic_category()'
1>/usr/include/boost/system/error_code.hpp:223: undefined reference to `boost::system::generic_category()'
1>/usr/include/boost/system/error_code.hpp:224: undefined reference to `boost::system::system_category()'
1>/home/visualstudio/projects/Asiotest/obj/x64/Debug/main.o: In function `boost::asio::error::get_system_category()':
1>/usr/include/boost/asio/error.hpp:224: undefined reference to `boost::system::system_category()'
1>collect2: error: ld returned 1 exit status
1>G:\asio\Asiotest\Asiotest\obj\x64\Debug\main.o : error :
1>/usr/include/boost/system/error_code.hpp:222: undefined reference to `boost::system : error : generic_category()'
1>/usr/include/boost/system/error_code.hpp:223: undefined reference to `boost::system : error : generic_category()'
1>/usr/include/boost/system/error_code.hpp:224: undefined reference to `boost::system : error : system_category()'
1>G:\asio\Asiotest\Asiotest\obj\x64\Debug\main.o: In function `boost::asio::error: : error :
1>/usr/include/boost/asio/error.hpp:224: undefined reference to `boost::system : error : system_category()'


Laut google ist der linker wohl falsch eingestellt, aber nunja, ist auf jeden fall ein komplett anderes Problem als ich eingangs hatte. Danke für deine Hilfe. Ich werd dann mal google genauer befragen, um mein Problem zu lösen. Denn die asio Bibliothek brauch ich für mein Vorhaben unbedingt :D
Mario86
Unregistrierter




Beitrag Mario86 Unregistrierter 15:56:32 15.09.2017   Titel:              Zitieren

Um das Thema hier abzuschließen:

Mittlerweile läuft alles, wie es soll. Ich fasse meine Probleme bzw deren Lösungen beim Einbinden der boost-Bibliotheken hier einmal zusammen, falls später jemand mal ähnliche Probleme hat und den Thread zufällig findet:

1. Aus irgendeinem Grund, den ich nicht verstehe, mag Visual C++ für Linux es nicht, wenn ihr in den includes backslah benutzt (owbohl das Autovervollständigen die selbst einträgt). Für Dateipfade darum lieber slash nutzen, dann findet er die Dateien auch.

Also nicht:
C++:
#include <boost\asio.hpp>

sondern:
C++:
#include <boost/asio.hpp>


2. Einige Bibliotheken von Boost funktionieren out of the box, wenn man sie einfach nur dem Include-Verzeichnis hinzufügt. Jedoch gilt das zum Beispiel nicht für asio. Damit diese funktioniert vorher den Command prompt öffnen (nicht den von Windows, sondern den von Visual Studio) und dann im Boostverzeichnis zuerst einmal bootstrap ausführen und dannach .\b2 (dauert etwa 30 min)
Als ich es im Windows command prompt versuchte, gab es beim Ausführen von bootstrap Fehler (witzigerweise je nachdem welche version von boost man benutzt jedes mal einen anderen Fehler, im Falle von 1.65.1 zum Beispiel c1: fatal error C1083: Datei (Quelle) kann nicht ge”ffnet werden: "yyacc.c": No such file or directory)
Nachdem das erledigt ist, gibt es in eurem Boost Ordner einen neuen Ordner namens stage. stage/lib dann unter Projekteigenschaften --> Linker --> Allgemein --> zusätzliche Bibiliotheksverzeichnisse hinzufügen.

Dann klappts auch mit dem asio :D
C++ Forum :: Compiler- und IDE-Forum ::  Einbinden von Boost in Visual C++ für Linux   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.