Tôi đã cố gắng liên kết tĩnh với thư viện C++ được gọi là Poco trên Windows bằng cách sử dụng các công cụ dòng lệnh của Visual Studio 2008.Cách liên kết tĩnh bằng cách sử dụng link.exe
tôi xây dựng chương trình của tôi với:
cl /I..\poco\lib /c myapp.cpp
link /libpath:..\poco\lib myapp.obj PocoNet.lib
Điều này dẫn đến một exe mà khi chạy đòi hỏi PocoNet.dll và PocoFoundation.dll.
Tôi đã dành một chút thời gian để đọc liên kết trong Windows và biết rằng liên kết tĩnh với thư viện chuẩn là cl /MT
, trong khi cl /MD
liên kết động.
Tôi đã cố gắng chỉ định /MT
, nhưng điều đó dường như không thay đổi bất cứ điều gì; ứng dụng của tôi vẫn yêu cầu tệp Poco DLL. (Tôi cũng nghi ngờ rằng /MT
là hành vi mặc định.)
Nhìn dưới ..\poco\lib
, tôi tìm thấy ở đó cũng là một PocoNetmt.lib, nhưng chỉ định rằng thay vì PocoNet.lib dẫn đến một loạt các lỗi LNK2005 ("đã được xác định"):
msvcprt.lib(MSVCP90.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" ([email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected]) already defined in exp.obj
sau đó tôi đã cố gắng xếp chồng trên nhiều cờ:
/verbose:lib
: hữu ích cho nhìn thấy những gì đang xảy ra/Zl
: kết quả tương tự như trước/nodefaultlib:libcmt.lib /nodefaultlib:msvcprt.lib
: nhận lỗi này:PocoFoundationmt.lib(Exception.obj) : warning LNK4217: locally defined symbol [email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@[email protected] (public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)) imported in function [email protected]@@[email protected]@@Z
thả
.lib
hoàn toàn, as suggested here: cùng một lỗi như trên
Tôi cũng thử một số các kết hợp ở trên, tất cả đều không có kết quả.
Mọi manh mối sẽ được đánh giá cao. Nhưng cũng hữu ích như bất kỳ con trỏ nào đến các tài nguyên hữu ích để gỡ rối (hoặc tìm hiểu) các loại vấn đề này.
Cảm ơn. POCO_STATIC là chìa khóa. Tôi rất khuyên bạn làm cho câu chú giải tối nghĩa này nổi bật hơn ở đâu đó trong tài liệu cấp cao và README. Khi Googling cho POCO_STATIC, các tham chiếu duy nhất cho nó nằm trong các bài đăng trên blog. – Yang