2012-06-21 12 views
7

Zainstalowałem libboost-dev przez apt-get i jest on umieszczony w /usr/lib.Zainstalowałem libboost, ale nie mogę połączyć się z nim

/usr/lib$ ls | grep boost 
libboost_filesystem.so.1.46.1 
libboost_iostreams.so.1.46.1 
libboost_serialization.so.1.46.1 
libboost_system.so.1.46.1 
libboost_thread.so.1.46.1 
libboost_wserialization.so.1.46.1 

Ale gdy próbowałem skompilować źródło, które używa boost_thread nadal mam błąd.

$ g++ tcp_echo.cpp -o tcp_echo -L/usr/lib -llibboost_thread 
/usr/bin/ld: cannot find -lboost_thread 
collect2: ld returned 1 exit status 
$ g++ tcp_echo.cpp -o tcp_echo -L/usr/lib -lboost_thread 
/usr/bin/ld: cannot find -lboost_thread 
collect2: ld returned 1 exit status 

Jaki jest właściwy sposób instalacji i połączenia z libboost?

+3

Nie potrzebujesz '-L/usr/lib', jest automatycznie dodawany do ścieżki wyszukiwania biblioteki. –

+2

Czy próbowałeś już uruchomić 'ldconfig' (jako root) po instalacji? –

+1

@JoachimPileborg ldconfig ma być uruchamiany przez apt, więc powinien być dobry. Zwłaszcza jeśli w każdym razie używa się '-L'. – robert

Odpowiedz

11

Jedna rzecz, którą zauważam to to, że nie masz libboost_thread.so. Masz wersjonowany plik 1.46.1, ale zazwyczaj biblioteki tworzą symboliczny link do wersjonowanej kopii o nieskorowanej nazwie. To może nie być , ale to jedna rzecz, którą zauważyłem. (Jest to zwykle wykonywane przez instalatora.) - Omaha

myślę, że o to chodzi. Oznacza to, że zainstalowałem libboost w niewłaściwy sposób. W rzeczywistości, tylko zainstalowany libboost-dev:

sudo apt-get install libboost-dev 

Ale co mam zrobić, to:

sudo apt-get install libboost-dev libboost1.46-doc libboost-date-time1.46-dev ibboost-filesystem1.46-dev libboost-graph1.46-dev libboost-iostreams1.46-dev libboost-math1.46-dev libboost-program-options1.46-dev libboost-python1.46-dev libboost-random1.46-dev libboost-regex1.46-dev libboost-serialization1.46-dev libboost-signals1.46-dev libboost-system1.46-dev libboost-test1.46-dev libboost-thread1.46-dev libboost-wave1.46-dev 

(Lub, w moim konkretnym przypadku zainstalowania libboost-system1.46-dev libboost-thread1.46-dev przynajmniej)

i po zainstalowaniu poprawnie, powinny być .a i .so w /usr/lib.

/usr/lib$ ls | grep boost 
libboost_date_time.a 
libboost_date_time-mt.a 
libboost_date_time-mt.so 
libboost_date_time.so 
libboost_date_time.so.1.46.1 
libboost_filesystem.a 
libboost_filesystem-mt.a 
... and so on ... 
+0

Kiedyś Ubuntu miał meta-pakiet libboost-dev-all, aby zainstalować wszystkie te. Jednak nie mogę tego teraz znaleźć.Oto linia poleceń, która może pomóc: 'sudo apt-get install' 'apt-cache search libboost | grep - -dev | grep -v '[12] \. [0-9]' | awk "{wydrukuj 1 $; } '' –

1

W polu komentarza wkręcono cytowanie tej sugestii, więc zamieszczam ją jako odpowiedź, by uzyskać prawidłowe cytowanie.

Kiedyś było, Ubuntu miał meta-pakiet libboost-dev-all, aby zainstalować wszystkie te. Jednak nie mogę tego teraz znaleźć. Oto wiersz poleceń, które mogą pomóc:

sudo apt-get install `apt-cache search libboost | \ 
    grep -- -dev | \ 
    grep -v '[12]\.[0-9]' | \ 
    awk '{ print $1; }'` 

(Taken from https://github.com/imvu-open/istatd/ plików install-boost-dev.sh)

+0

dla innych - Miałem dokładnie problem z OP, a to polecenie w istocie natychmiast go rozwiązało. ubuntu 15.10. Nawiasem mówiąc, "libboost-dev" wydaje się nie sugerować brakującego "libboost-dev-all" –

2

w Ubuntu 16.04, pakiet nazywa się: libboost-all-dev (nie libboost- dev-all)

Powiązane problemy