用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
,同樣起作用。