2012-02-14 38 views
6

Tôi đang cố gắng biên dịch/cổng phiên bản OpenOffice cũ hơn. Nó sử dụng Boost v1.34.1, là một phần của cây nguồn. Thông báo lỗi như sau:Biểu tượng tăng không tìm thấy

Undefined symbols: 
    "boost::throw_exception(std::exception const&)", referenced from: 
     boost::detail::shared_count::shared_count<ScToken>(ScToken*)in detfunc.o 
ld: symbol(s) not found 

Tăng cường mới đối với tôi và tôi không thể tìm thấy trực tuyến nhiều để giúp tôi hiểu điều này. Từ thông báo lỗi, tôi hiểu rằng tôi có thể cần phải liên kết một thư viện. Tuy nhiên, boost::throw_exception được xác định trong tệp tiêu đề không có thư viện phù hợp (mà tôi có thể tìm thấy). Chỉ cần cho đá, tôi đã cố gắng #include <boost/throw_exception.hpp> trong detfunc và sử dụng các liên kết tượng trưng để đặt các tập tin tiêu đề trong cùng một thư mục mà không có may mắn.

Có thư viện nào tôi nên liên kết với -l hoặc đường dẫn bao gồm với -I không? Làm cách nào để tôi nhận được biểu tượng đó được tham chiếu?

Trả lời

12

Tăng dự kiến ​​dự án được xây dựng với macro BOOST_NO_EXCEPTIONS không xác định hoặc để tự xác định hàm boost::throw_exception.

Từ <boost/throw_exception.hpp> trong phiên bản 1.34.1: tiêu đề cấu hình

namespace boost 
{ 

#ifdef BOOST_NO_EXCEPTIONS 

void throw_exception(std::exception const & e); // user defined 

#else 

//[Not user defined --Dynguss] 
template<class E> inline void throw_exception(E const & e) 
{ 
    throw e; 
} 

#endif 

} // namespace boost 

Boost sẽ xác định liệu để xác định vĩ mô hay không. Có vẻ như nó sẽ nén xuống trình biên dịch bạn đang sử dụng, nhưng có thể có các yếu tố khác. Hãy xem trong thư mục boost/config/compiler/ cho tệp tiêu đề tương ứng với trình biên dịch của bạn, sau đó tìm kiếm BOOST_NO_EXCEPTIONS trong đó. Nên có một số điều kiện xung quanh #define để giúp giải thích khi Boost xác định điều kiện. Bạn có thể định cấu hình bản dựng của mình để tránh định nghĩa và vượt qua lỗi liên kết mà bạn đang gặp phải.

Nếu bạn không thể thay đổi cấu hình trình biên dịch của mình để tránh định nghĩa, thì có thể bạn đang tự mình định nghĩa boost::throw_exception(std::exception const & e) ở đâu đó trong mã OpenOffice. Mặc dù vậy, tôi không quen với mã đó nên tôi không thể đưa ra một gợi ý hay về nơi nó nên đi.

+0

Cảm ơn! Cuối cùng tôi đã đọc qua 'throw_exception.hpp' và đã khám phá chính xác những gì bạn đã trả lời. Tôi đã không nhận thức được 'boost/config/compiler /' cho các cờ biên dịch, nhưng chắc chắn đủ, 'BOOST_NO_EXCEPTIONS' đã được định nghĩa. – Jerry

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