2011-07-17 7 views
8

Tôi đã cài đặt tăng sử dụng macports. Các tập tin dường như trong/opt/local/include/tăng/cho -lboost_system

makefile của tôi là không còn làm việc và tôi nhận được lỗi sau

Undefined symbols: 
"boost::system::generic_category()", referenced from: 
    __static_initialization_and_destruction_0(int, int)in client.o 
    __static_initialization_and_destruction_0(int, int)in client.o 
"boost::system::system_category()", referenced from: 
    boost::asio::error::get_system_category() in client.o 
    boost::system::error_code::error_code()in client.o 
    __static_initialization_and_destruction_0(int, int)in client.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 
make: *** [client] Error 1 

ở trường các giải pháp là sử dụng -lboost_system như một cuộc tranh cãi đến g + +, nhưng bây giờ tôi đã đưa dự án về nhà để mac của tôi, điều này không hoạt động. Tôi nghĩ rằng điều này chủ yếu là do thực tế là ở trường các tập tin tăng cường được tại usr/local/lib (hoặc một nơi nào đó tương tự).

Khi tôi thêm đối số -lboost_system tôi nhận được thông báo sau

g++ -I/opt/local/include -lboost_system -o client client.o Packet.o 
ld: library not found for -lboost_system 
collect2: ld returned 1 exit status 
make: *** [client] Error 1 

Tôi đã thử một vài biến thể sử dụng -L và -l, nhưng tôi dường như không thể tìm thấy một combo mà làm việc. Ở trường tôi cũng không phải sử dụng -L. Tôi đã đọc một vài bài viết khác ở đây về các vấn đề tương tự, nhưng họ đã sửa nó bằng cách thêm các lá cờ -l không làm việc cho tôi.

Trợ giúp! cảm ơn!

Trả lời

12

Bạn đang thiếu một -L/opt/local/lib. Bạn sẽ có thể thiết lập các LDFLAGS trong Makefile của bạn:

LDFLAGS=-L/opt/local/lib 

này giả định rằng các thư viện Boost là trong /opt/local/lib tất nhiên.

Nếu bạn không sử dụng thông thường CXXFLAGSLDFLAGS biến trong Makefile của bạn, sau đó thêm -L/opt/local/lib trực tiếp trong quy tắc cuối cùng của bạn:

client: client.o Packet.o 
    g++ -L/opt/local/lib -o client client.o Packet.o -lboost_system 

Các -I chỉ nói với trình biên dịch, nơi tập tin tiêu đề là, các mối liên kết cần thư viện và bạn sử dụng -L cho điều đó.

+0

bạn sẽ xem xét điều đó! Có tất cả các tệp nằm trong/opt/local/lib. Cho phép hy vọng công trình này – jim

+0

Nó hoạt động! cám ơn rất nhiều. Tôi có rất nhiều điều để học hỏi. – jim

+1

@jim Bạn có ít nhất một thứ khác để học .. Bạn cần chấp nhận câu trả lời nếu nó đúng. Đó là cách hệ thống Hỏi & Đáp hợp tác này hoạt động. – GrafikRobot

1

Bạn có thể cố gắng tìm kiếm nó trong hệ thống của bạn như thế này:

/sbin/ldconfig -p | grep boost_system | cut -d\> -f2 

nếu thư viện được cài đặt, sau đó nó sẽ hiển thị một cái gì đó như thế này:

/usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0 

hoặc nó sẽ hiển thị chỉ một dòng trống

Trong trường hợp của bạn, có vẻ như tăng cường được cài đặt ở một nơi khác, do đó cần thêm thông tin liên kết, do đó cần chuyển đổi -L, nếu bạn có nó trong/usr/lib, như tôi có thì không cần thêm thông tin trong makefile