Frage

Ich versuche, ein Projekt mit boost des Asio zu bauen, und ich ein paar Probleme habe. Am Anfang habe ich versucht, das Projekt ohne zusätzliche Bibliotheken zu bauen, da alles, was angeblich in den Header-Dateien ist.

Das Programm Ich versuche, sieht wie folgt zu erstellen:

#include <iostream>
#include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

int main()
{
    boost::asio::io_service io;
    boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));

    t.wait();

    std::cout << "Hello, world!" << std::endl;

    return 0;
}

Es kann gefunden werden hier auf Boost-Webseite.

Also, zunächst ich gerade habe:

-I /usr/include/boost_1_40_0

Dies führte zu den folgenden Fehlern:

make -k all
Building target: HelloWorld
Invoking: GCC C++ Linker
g++  -o"HelloWorld"  ./main.o  
./main.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost_1_40_0/boost/system/error_code.hpp:205: undefined reference to `boost::system::get_system_category()'
/usr/include/boost_1_40_0/boost/system/error_code.hpp:206: undefined reference to `boost::system::get_generic_category()'
/usr/include/boost_1_40_0/boost/system/error_code.hpp:211: undefined reference to `boost::system::get_generic_category()'
/usr/include/boost_1_40_0/boost/system/error_code.hpp:212: undefined reference to `boost::system::get_generic_category()'
/usr/include/boost_1_40_0/boost/system/error_code.hpp:213: undefined reference to `boost::system::get_system_category()'
./main.o: In function `boost::asio::error::get_system_category()':
/usr/include/boost_1_40_0/boost/asio/error.hpp:218: undefined reference to `boost::system::get_system_category()'
./main.o: In function `error_code':
/usr/include/boost_1_40_0/boost/system/error_code.hpp:312: undefined reference to `boost::system::get_system_category()'
./main.o: In function `posix_tss_ptr':
/usr/include/boost_1_40_0/boost/asio/detail/posix_tss_ptr.hpp:47: undefined reference to `pthread_key_create'
./main.o: In function `~posix_tss_ptr':
/usr/include/boost_1_40_0/boost/asio/detail/posix_tss_ptr.hpp:61: undefined reference to `pthread_key_delete'
./main.o: In function `boost::asio::detail::posix_thread::join()':
/usr/include/boost_1_40_0/boost/asio/detail/posix_thread.hpp:77: undefined reference to `pthread_join'
./main.o: In function `~posix_thread':
/usr/include/boost_1_40_0/boost/asio/detail/posix_thread.hpp:69: undefined reference to `pthread_detach'
collect2: ld returned 1 exit status
make: *** [HelloWorld] Error 1
make: Target `all' not remade because of errors.

Es schien, dass ich die Systembibliothek benötigt. So folgte ich den Anweisungen auf dem Getting Started Guide gefunden hier , gab die mir ein Bündel in / usr / include / boost_1_40_0 / Bühne / lib . Unter ihnen war libboost_system.a . So habe ich versucht, mit zu kompilieren:

-I /usr/include/boost_1_40_0
-L /usr/include/boost_1_40_0/stage/lib
-l libboost_system

Aber ich habe dies:

make -k all
Building target: HelloWorld
Invoking: GCC C++ Linker
g++ -L/usr/lib -L/usr/include/boost_1_40_0/stage/lib -o"HelloWorld"  ./main.o   -llibboost_system
/usr/bin/ld: cannot find -llibboost_system
collect2: ld returned 1 exit status
make: *** [HelloWorld] Error 1
make: Target `all' not remade because of errors.

Ich bin mir nicht sicher, warum, aber es kann nicht scheinen, um die Bibliothek oder einen der anderen zu erkennen, dass ich versuchen. Was könnte ich falsch tun? Vielen Dank im Voraus!

War es hilfreich?

Lösung

Ändern -llibboost_system -lboost_system.

In Linux, das „lib“ Präfix vor einer Bibliothek wird nicht verwendet, wenn die Bibliothek verweisen.

Andere Tipps

In diesem Fall James' Antwort war richtig, aber wenn jemand anderes passiert auf diesen Beitrag stolpern, wie ich dann darüber im Klaren sein, dass Sie haben diese Nachricht erhalten, wenn Sie alte Boost-Header verknüpfen gegen neuere Bibliotheken. get_system_category() speziell ist veraltet. Ich in dieses Problem lief während versehentlich Distro-Header versehen, einschließlich, aber die Verknüpfung gegen meine eigene interne Kopie zu steigern.

Wenn Sie immer noch Probleme bekommen möchten Sie vielleicht, indem zu den Linker-Flags Posix-Threads sind:

-lpthread
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top