用NSIS官方提供的plugin接口搭了一個C++工程,發現報錯很奇怪:
LINK : fatal error LNK2026: 模塊對於 SAFESEH 映像是不安全的
LINK : fatal error LNK1104: 無法打開文件“LIBC.lib”
解決的辦法是,在CMakeLists.txt中的add_executable或者add_library之前添加鏈接標志:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO /NODEFAULTLIB:libc.lib") # 程序輸出文件為exe文件時起作用
set(CMAKE_SHARED_LINKR_FLAGS "${CMAKE_SHARED_LINKR_FLAGS} /SAFESEH:NO /NODEFAULTLIB:libc.lib") # 程序輸出文件為dll文件時起作用
set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKR_FLAGS} /SAFESEH:NO /NODEFAULTLIB:libc.lib") # 程序輸出文件為lib文件時起作用
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /SAFESEH:NO /NODEFAULTLIB:libc.lib") # 程序輸出文件為module文件時起作用
此外,不用上述方法也可以手動在vs的項目屬性->鏈接器->命令行中加入/SAFESEH:NO /NODEFAULTLIB:libc.lib,同樣起作用。
