2013-08-13 21 views
6

có vẻ như tôi không thể thấy rõ ràng. Tôi muốn sử dụng một số tính năng thư viện Boost cho dự án của tôi và biết tôi đang nhận được các lỗi này đẹp tất cả của một đột ngột:Không xác định tham chiếu đến 'boost :: system :: generic_category()'?

Linking CXX executable ATFOR CMakeFiles/ATFOR.dir/stdafx.cc.o: In function __static_initialization_and_destruction_0(int, int)': stdafx.cc:(.text+0x3c): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x48): undefined reference to boost::system::generic_category()' stdafx.cc:(.text+0x54): undefined reference to boost::system::system_category()' CMakeFiles/ATFOR.dir/Main.cc.o: In function __static_initialization_and_destruction_0(int, int)': Main.cc:(.text+0x29d): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2a9): undefined reference to boost::system::generic_category()' Main.cc:(.text+0x2b5): undefined reference to boost::system::system_category()' collect2: error: ld returned 1 exit status

Ở đây bạn tìm thấy CMakeLists.txt của tôi, tiêu đề, và chính: http://pastie.org/8231509
Như bạn có thể thấy, tôi đã thử rất nhiều chơi với các CMakeLists và tôi khá chắc chắn rằng tôi có tất cả các tiêu đề dự án của tôi yêu cầu. Dù sao, tôi đã không bao giờ có lỗi như vậy trước và tôi thực sự đánh giá cao bất kỳ đề xuất/giải pháp về những gì sai ở đây vì tôi không có bất kỳ ý tưởng còn lại cho bây giờ. Thx trước.

Trả lời

13

Bạn phải thêm một cách rõ ràng hệ thống thư viện cho nó được liên kết vào chương trình của bạn

find_package(Boost REQUIRED COMPONENTS system) 
#          ^^^^^^ this :) 

này cũng phải được thực hiện đối với các thư viện khác Boost được xây dựng riêng (regex, chủ đề, vv) (see here) .

+0

Điều đó không khắc phục được lỗi:/ – Auberotte

+2

Cmake nói rằng nó đã tìm thấy libs cho hệ thống tệp, hệ thống, ... nhưng khi tôi 'thực hiện' vẫn còn là lỗi liên kết, tôi đã cài đặt libboost-1.53.0- tất cả-dev, vì vậy tôi nên có tất cả tôi cần. Có một tiêu đề cho tăng :: hệ thống mà tôi cần phải bao gồm? Không tìm thấy một – Auberotte

7

Ok, cho những người quan tâm, câu trả lời của Mark Garcia là một cuộc gọi tốt nhưng những gì là quan trọng hơn ở đây là bạn cần phải liên kết một cách rõ ràng libs bạn muốn từ tăng như

TARGET_LINK_LIBRARIES(ATFOR ${OpenCV_LIBS} curl ${Boost_SYSTEM_LIBRARY} ${Boost_FILESYSTEM_LIBRARY})

Tất cả các tùy chọn khác tôi đã cố gắng và đọc về đã không làm việc cho tôi, không biết tại sao nhưng tôi hy vọng điều này sẽ giúp một ai đó.

11

Thiếu "hệ thống" trong giai đoạn liên kết. cấu hình của tôi là như sau và nó sửa lỗi:

find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem) 

include_directories(... ${Boost_INCLUDE_DIRS}) 

link_directories(... ${Boost_LIBRARY_DIRS}) 

target_link_libraries(... ${Boost_LIBRARIES}) 

Lưu ý rằng việc sử dụng chỉ

find_package(Boost 1.55.0 REQUIRED) 

không hoạt động như ${Boost_LIBRARIES} sẽ không có sẵn rồi.

+1

Siêu hữu ích. Cảm ơn. +1. Trong trường hợp của tôi, tất cả những gì tôi phải viết là 'find_package (Boost REQUIRED system)'. Tôi không (chưa) cần hệ thống tập tin. –

+1

Mặc dù câu hỏi này không liên quan đến vấn đề của tôi, tôi quyết định tìm hiểu câu trả lời ở đây và câu trả lời của bạn khiến tôi nhận ra rằng tôi cần 'filesystem' để giải quyết vấn đề của mình. Cảm ơn bạn. +1. – rayryeng

2

Kiểm tra xem bạn có bản dựng chính xác (gcc, msvc ...) của thư viện tăng cường hay không. Tôi đã gặp lỗi này khi tôi thử liên kết một dự án bằng cách sử dụng mingw với các thư viện được tạo cho msvc. Nếu nó khác, hãy thử xây dựng nó cho nền tảng bạn đang sử dụng trong dự án của bạn.

Lần đầu tiên tôi sử dụng Boost tôi đã xây dựng nó với các thông số mặc định dẫn đến thư viện được xây dựng cho msvc, mặc dù tôi đang sử dụng mingw cho dự án của mình. Tuy nhiên CMake đã tìm thấy tiêu đề và thư viện và mọi thứ dường như ổn cho đến khi tôi bắt đầu sử dụng tính năng thư viện và biên dịch, dẫn đến lỗi được đề cập bởi OP.

Rebuilding boost to toolset=gcc giải quyết nó (Tôi đã sử dụng Windows, CMake + MinGW).