Câu hỏi mô-đun không an toàn cho hình ảnh SAFESEH C ++


Tôi đang sử dụng Microsoft Visual Studio 2011 Professional Beta

Tôi đang cố chạy các tệp OpenCV C ++ (http://opencv.willowgarage.com/wiki/Welcome) mà tôi đã biên dịch bằng cMake & Visual Studio Complier.

Tuy nhiên khi tôi đi để gỡ lỗi dự án tôi nhận được hơn 600 lỗi hầu hết trong số họ là:

lỗi LNK2026: mô-đun không an toàn cho hình ảnh SAFESEH.

Rõ ràng những tập tin này nằm trong dự án opencv_ffmpeg nhưng tôi không thể tìm thấy chúng, tôi đã xem trang Saforsh Safe Exception Handlers trên trang trợ giúp của Microsoft nhưng tôi không thể tìm thấy bất kỳ câu trả lời dứt khoát nào.

Tôi đã tự hỏi nếu có ai khác đã có vấn đề này và nếu họ quản lý để sửa chữa nó.


76
2018-05-15 11:41


gốc


Điều này xảy ra khi bạn liên kết một .obj hoặc .lib chứa mã được tạo bởi phiên bản trước của trình biên dịch. Mà tất nhiên sẽ là phổ biến nếu bạn tải về một nhị phân cho opencv_ffmpeg thay vì nguồn. Bạn có thể tắt tùy chọn trình liên kết nhưng sau đó bạn sẽ vẫn có sự không tương thích phiên bản CRT có thể byte. Xây dựng lại thư viện từ nguồn. - Hans Passant
Cảm ơn sự giúp đỡ, nó đã hoạt động - Aaron Thompson
@ HansPassant Phải làm gì khi không có nguồn? - GregC
Điều hiển nhiên: yêu cầu chủ sở hữu mã cung cấp cho bạn bản cập nhật. - Hans Passant
@ HansPassant Tôi hy vọng các nhà cung cấp vẫn còn xung quanh để thực hiện một bản cập nhật. Nghe có vẻ giống như một vấn đề "yếu tố xe tải". - GregC


Các câu trả lời:


Từ các ý kiến:

Điều này xảy ra khi bạn liên kết một .obj hoặc .lib chứa mã được tạo bởi phiên bản trước của trình biên dịch. Mà tất nhiên sẽ là phổ biến nếu bạn tải về một nhị phân cho opencv_ffmpeg thay vì nguồn. Bạn có thể tắt tùy chọn trình liên kết nhưng sau đó bạn sẽ vẫn có sự không tương thích phiên bản CRT có thể byte. Xây dựng lại thư viện từ nguồn. - Hans Passant 15 tháng 5 lúc 13:01   
  
  Cảm ơn sự giúp đỡ, nó đã hoạt động - Aaron Thompson ngày 17 tháng 5 lúc 14:50


54
2017-11-03 16:36



Nó cũng có thể được gây ra bởi, như các trạng thái lỗi, các mô-đun mà trình liên kết không thể tìm thấy các trình xử lý ngoại lệ an toàn. Mô-đun ngôn ngữ hội đồng nói riêng - như được thảo luận trong các câu trả lời khác. Có một số thông tin về điều này đây. - Nick Westgate


Vô hiệu hóa tùy chọn "Hình ảnh có Trình xử lý ngoại lệ an toàn" trong thuộc tính Project -> Thuộc tính cấu hình -> Trình liên kết -> Tab nâng cao đã giúp tôi.


118
2017-09-10 16:48



Điều này không có hiệu quả đối với tôi. - Pop-A-Stash
Tương tự như vậy đối với tôi. Việc bắt giữ có vẻ là, mặc dù tôi có thể chọn SAFESEH: NO trong menu con Tùy chọn Nâng cao trong cài đặt trình liên kết, nó sẽ không được chọn. Nó luôn luôn trở lại SAFESEH: CÓ. - user382459
Thành công, với VS 2013 Express - gbarry
Thành công, VS 2015 - Yuri S. Cherkasov
Thành công, VS 2012 - themadmax


Cách khác là thêm một số trình xử lý SEH (ví dụ trống) vào các tệp asm và biên dịch chúng bằng /safeseh tùy chọn, sau đó biên dịch mã khác bình thường với /SAFESEH:YES tùy chọn trình biên dịch.

Trình xử lý SEH trống:

.safeseh SEH_handler

SEH_handler   proc
;handler
ret

SEH_handler   endp

6
2017-11-27 10:03



Tôi không bận tâm thêm một trình xử lý vào nguồn của bên thứ 3 (zlib), /safeseh có vẻ đủ. Điều này thực sự nên được upvoted! - mlt
Bất kỳ ai gặp vấn đề với zlib đều thấy điều này (CTRL + F safeseh) tannerhelland.com/5076/compile-zlib-winapi-wapi-stdcall - codekiddy


Nếu bạn gặp lỗi này trong khi xây dựng ZLIB trong Visual Studio thì đây là giải pháp. Tìm kiếm contrib\masmx86\bld_ml32.bat và thêm /safeseh như một lựa chọn

Trước

ml /coff /Zi /c /Flmatch686.lst match686.asm
ml /coff /Zi /c /Flinffas32.lst inffas32.asm

Sau

ml /safeseh /coff /Zi /c /Flmatch686.lst match686.asm
ml /safeseh /coff /Zi /c /Flinffas32.lst inffas32.asm

6
2018-05-15 18:38



Tôi đã có cùng một vấn đề với zlib, nhưng đã phải thay đổi đạo cụ trên .asm tệp trong trình khám phá giải pháp thay thế. - Cillié Malan


Số dặm của bạn có thể thay đổi, nhưng không có gợi ý nào ở trên có hiệu quả đối với tôi (mặc dù tôi không cố gắng xử lý trình xử lý ngoại lệ asm của riêng mình).

Công việc đã làm là chọn mục tiêu xây dựng Release / x64.

Tôi đang chạy Windows 10 trên một máy tính 64-bit, và sử dụng Visual Studio 2015.

Các mục tiêu Release / Win32 hoạt động, quá. Tôi đoán điều chính là chọn "Release".


0