2010-08-12 36 views
7

Tại nơi làm việc chúng ta có một DLL MFC mở rộng mà xây dựng tốt với 1,35 nhưng khi xây dựng với 1,43 gây lỗi sau:Upgrade của BOOST 1,35-1,43 gây lỗi mối liên kết với __pRawDllMain (MFC liên quan)

error LNK2005: __pRawDllMain already defined in ApObs.obj 

Nếu tôi kích hoạt BOOST_LIB_DIAGNOSTIC xây dựng cũ danh sách:

linking to lib file: libboost_thread-vc71-mt-gd-1_35.lib 

linking to lib file: libboost_thread-vc71-mt-gd-1_43.lib 

Vì vậy, không chan ge có mà thư viện được liên kết

Thông báo lỗi đầy đủ là:

libboost_thread-vc71-mt-gd-1_43.lib(tss_pe.obj) : error LNK2005: __pRawDllMain already defined in ApObs.obj 

Tôi đã làm một diff trên tss_pe.cpp trong cả hai phiên bản thư viện và họ là giống hệt nhau, vì vậy tôi không chắc chắn về vấn đề là.

Bạn có thể nhận được thông báo biến mất bằng cách xác định BOOST_THREAD_USE_DLL nhưng sau đó chúng tôi sẽ cần gửi BOOST_THREAD-VC71-MT-GD-1_43.DLL vì vậy tôi không nghĩ đây là giải pháp tốt nhất.

+0

bạn đề cập đến 1,36 hai lần, b ut đầu ra liên kết nói 1.35? –

+0

Cảm ơn, đã sửa chữa –

Trả lời

0

Điều này xảy ra do thứ tự liên kết.
Bạn có thể thay đổi lỗi liên kết bằng cách thêm thủ công các lib vào Phụ thuộc bổ sung.
Trong trường hợp của tôi đặt libboost_thread-vc71-mt-gd-1_43.lib TRƯỚC lib mâu thuẫn khác giải quyết vấn đề:

Project -> Properties -> Configuration Properties -> Linker -> Input -> Dependencies bổ sung

libboost_thread-vc80-mt-1_40.lib; mfcs80u.lib;% (AdditionalDependencies)

Lưu ý rằng trong trường hợp của tôi nó đã mâu thuẫn với mfcs80u.lib

+0

Tôi không còn ở công ty đó nữa, và tôi nghĩ cuối cùng họ chỉ chuyển sang phiên bản DLL, nhưng tôi nghĩ câu trả lời của bạn là chính xác nên tôi sẽ đánh dấu nó như vậy –

1

Có sự không tương thích đã biết giữa MFC và chuỗi liên kết tăng liên kết tĩnh, cả hai cố gắng móc vào DllMain để khởi tạo nội dung. Điều này đã được giới thiệu trong tăng 1,37.

From the author of boost::thread:

If you can ensure that on_process_exit from boost/thread/detail/tss_hooks.hpp is called when the DLL is unloaded then you can patch libs/thread/src/win32/tss_pe.cpp to remove the use of _pRawDllMain.

(Ông khuyến cáo sử dụng phiên bản DLL, mặc dù.)

Có vẻ như đã được efforts để làm điều này vá không cần thiết, nhưng dường như không có kết quả cho đến nay ...

+0

Bắt đầu với Boost 1.52 [điều này có thể] (http://stackoverflow.com/a/34769235/1969455). –

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