2012-06-21 21 views
7

Tôi đã cài đặt libboost-dev qua apt-get và được đặt trong /usr/lib.Tôi đã cài đặt libboost nhưng không thể liên kết với nó

/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 

Nhưng khi tôi cố gắng để biên dịch một nguồn mà sử dụng boost_thread tôi vẫn có một lỗi.

$ 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 

Cách nào đúng để cài đặt và liên kết đến libboost?

+3

Bạn không cần '-L/usr/lib', nó sẽ tự động được thêm vào đường dẫn tìm kiếm thư viện. –

+2

Bạn đã thử chạy 'ldconfig' (làm thư mục gốc) sau khi cài đặt chưa? –

+1

@JoachimPileborg ldconfig được cho là chạy bởi apt, vì vậy anh ta nên tốt. Đặc biệt nếu '-L' được sử dụng. – robert

Trả lời

11

Một điều tôi nhận thấy là bạn không có libboost_thread.so. Bạn có tệp 1.46.1 được phiên bản nhưng thường các thư viện sẽ tạo liên kết tượng trưng tới bản sao được phiên bản có tên chưa được đặt tên. Điều đó có thể không phải là nhưng đó là một điều tôi nhận thấy. (Điều này thường được thực hiện bởi trình cài đặt .) - Omaha

Tôi nghĩ đây là điểm chính. Nó ngụ ý rằng tôi đã cài đặt libboost sai cách. Trong thực tế, tôi chỉ được cài đặt libboost-dev:

sudo apt-get install libboost-dev 

Nhưng những gì tôi cần làm là:

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 

(Hoặc, trong trường hợp cụ thể của tôi, cài đặt libboost-system1.46-dev libboost-thread1.46-dev ít nhất)

Và một khi bạn cài đặt chúng chính xác, phải có .a.so trong /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

Nó từng là, Ubuntu có gói siêu phần mềm libboost-dev-tất cả để cài đặt tất cả chúng. Tuy nhiên, tôi dường như không thể tìm thấy nó ngay bây giờ.Đây là một dòng lệnh có thể giúp: 'sudo apt-get install' 'apt-cache search libboost | grep - -dev | grep -v '[12] \. [0-9]' | awk '{print $ 1; } '' –

1

Hộp nhận xét đã làm hỏng trích dẫn đề xuất này, vì vậy tôi đăng câu trả lời đó để nhận được câu trích dẫn chính xác.

Nó từng là, Ubuntu có gói siêu dữ liệu libboost-dev-all để cài đặt tất cả những thứ đó. Tuy nhiên, tôi dường như không thể tìm thấy nó ngay bây giờ. Dưới đây là một dòng lệnh có thể giúp:

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

(Trích từ https://github.com/imvu-open/istatd/ tập tin install-boost-dev.sh)

+0

cho những người khác - tôi đã có chính xác vấn đề mà OP đã có, và lệnh này thực sự ngay lập tức giải quyết nó. ubuntu 15.10. Ngẫu nhiên, 'libboost-dev' dường như không ngụ ý cái thiếu 'libboost-dev-all' –

2

Trong Ubuntu 16.04, gói được đặt tên: libboost-all-dev (không libboost- dev-all)

Các vấn đề liên quan