Tôi đã tạo một giải pháp mới cho zlib 1.2.7, thiết lập nó như một thư viện tĩnh, thêm các tiêu đề cần thiết và các tệp nguồn từ ./zlib/contrib/minizip
và nhận nó để biên dịch tốt. Sau đó tôi liên kết nó với libpng (cũng như là một lib tĩnh), cũng biên dịch tốt. Sau đó, tôi liên kết libpng với dự án công cụ đồ họa của tôi (cũng là một thư viện tĩnh) ... vẫn không có lỗi.Bật/tắt SAFESEH trong VC11?
Nhưng ngay sau khi tôi liên kết dự án chính của tôi vào công cụ đồ họa của tôi, tôi nhận được một số lỗi LNK2026 về crc32.obj, deflate.obj, inflate.obj, d3dxplane.obj, d3dxvec4 .obj và các mô-đun liên quan đến zlib/directx khác. Nó nói với tôi rằng họ đang đến từ lib đồ họa động cơ của tôi, vì vậy tôi đã quyết định sửa lỗi này bằng cách thêm /SAFESEH:NO
vào cờ liên kết của tôi cho các dự án tương ứng.
LƯU Ý: Tôi có lẽ nên nói rằng tất cả các dự án được đặt để nhắm mục tiêu x86, KHÔNG x64.
Vấn đề, tuy nhiên, hiện tôi đang nhận được:
warning LNK4044: unrecognized option '/SAFESEH'; ignored
dẫn đến lỗi LINK2026 tương tự trong dự án chính của tôi.
Nếu tôi mở lời nhắc lệnh phòng thu trực quan và nhập LINK /?
, xác nhận rằng /SAFESEH
là tùy chọn trình liên kết hợp lệ. Tôi gặp lỗi tương tự khi tôi sử dụng /SAFESEH
(không có ': NO') và nếu tôi bỏ qua nó hoàn toàn thì dự án chính của tôi đơn giản từ chối việc xây dựng.
Điều gì đang xảy ra ở đây? Làm thế nào để tôi có được điều này?
Đó là lỗi đánh máy. Nó được viết đúng là '/ SAFESEH' trong tất cả các dự án. Dự án duy nhất có cài đặt đó là dự án chính của tôi (những người khác nói _Librarian_ thay vì _Linker_ và tùy chọn không tồn tại trong _Librarian -> "All Options" _). Tôi đã thay đổi nó thành _NO_ trong dự án chính của mình và biên dịch và chạy mà không có bất kỳ lỗi nào ... nhưng tôi muốn thay đổi điều này ở mức sâu hơn bằng cách hỗ trợ nó trong lib tĩnh của tôi, để các nhà phát triển bên thứ ba sẽ không bị buộc vô hiệu hóa nó trong các dự án của riêng họ. Điều này có thể không? – RectangleEquals
Chắc chắn, xây dựng lại tất cả các .lib bạn sử dụng. –
Zlib, libpng và công cụ của tôi là những người duy nhất tôi sử dụng (ngoài d3d9.lib & d3dx9.lib, tất nhiên là nguồn đóng) ... và như tôi đã nói, có vẻ như không có cài đặt nào được gọi là "Hình ảnh có Trình xử lý ngoại lệ an toàn" trong bất kỳ hình ảnh nào trong số đó. Do đó, việc xây dựng lại chúng không giải quyết được gì. Và nếu điều đó xảy ra, tôi sẽ biết vì tôi đã luôn xây dựng lại chúng trước khi xây dựng lại dự án chính của tôi. Vì vậy, hoặc là tôi trở lại hình vuông nếu tôi muốn một giải pháp thực sự, hoặc tôi chỉ có thể buộc các dev khác để vô hiệu hóa các tùy chọn trong các dự án của họ. – RectangleEquals