Tôi đang sử dụng mingw gcc và msys để xây dựng một số tiện ích GNU. Trong quá khứ, tôi đã có rất nhiều vấn đề gây ra bởi các tập tin thực thi khác nhau đòi hỏi các phiên bản libiconv khác nhau, vì vậy để tránh vấn đề tôi muốn liên kết biểu tượng tĩnh vào các tệp thi hành.Làm cách nào để liên kết tĩnh biểu tượng trên cửa sổ bằng cách sử dụng msys?
Tôi đã xây dựng libiconv bằng cách sử dụng mingw và msys có cấu hình --enable-static. Điều này tạo ra cả tệp DLL, thư viện nhập .dll.a và thư viện tĩnh .a tĩnh.
Tuy nhiên, khi tôi cố gắng xây dựng một chương trình khác liên kết với một đơn giản -liconv, tôi nhận được DLL liên kết. Tôi giả định rằng ld là vì lý do nào đó thích thư viện nhập qua thư viện tĩnh (không phải là một lựa chọn không đúng trong nói chung, đây là trường hợp đặc biệt).
Làm cách nào để đảm bảo rằng các chương trình tôi tạo được liên kết tĩnh? Một cách tiếp cận rõ ràng chỉ đơn giản là để loại bỏ các tập tin .dll.a trong khi làm việc xây dựng. Đó có lẽ là lựa chọn đơn giản nhất, nhưng tôi tò mò - có một lá cờ liên kết tôi có thể thiết lập (thông qua một cái gì đó như LDFLAGS) để buộc biểu tượng được tải tĩnh (lý tưởng, mà không ảnh hưởng đến các thư viện khác, nhưng tại một pinch tôi muốn được OK với tải tất cả các thư viện tĩnh)
Có lẽ lần đầu tiên hai sẽ liên kết * mọi thứ * tĩnh, trong khi liên kết thứ ba chỉ có biểu tượng tĩnh (và các thư viện khác như zlib sẽ vẫn liên kết đến dll). –
Hoặc '-Wl, -Bstatic, -liconv' –