尝试在 Windows 8.1 中使用 -static
标志运行使用 g++ 4.8.1 编译的 C++ 程序时出现执行错误。当我编译它时,我使用以下结构:
g++ CPP_FILES H_FILES -std=c++11 -O3 -static -I "C:\...\Path_to_include_directory" -L "C:\...\Path_to_library_directory -l library -o PROGRAM.exe
因为我想要静态编译,所以库名称是 libgsl_dll_d
(而它的真实名称是 libgsl_dll_d.lib)。
没有编译错误,然后在执行时中断。消息错误表明 libgsl_d.dll 不在系统中。为什么那个消息?我不是在调用那个库,顺便说一句,它不应该被静态编译?可执行文件中不应存在任何依赖关系。
我必须说,在 Linux Ubuntu 14.04 中编译和运行该软件时,我完全没有遇到任何错误。
有什么想法吗?我知道静态可执行文件不可能调用动态库。为什么那个错误?如何解决?
最佳答案
-static
将导致链接器更喜欢静态库而不是动态库。但它不会将 DLL 转换为静态库。通常当您已经拥有同一个库的静态和动态版本时使用它。
看起来你的文件 libgsl_dll_d.lib
是一个 DLL 导入库。 DLL 导入库的目的是允许 DLL 像静态库一样使用。它不是 DLL 的静态版本。因此,当您链接它时,它最终使用 DLL 也就不足为奇了!
关于c++ - C++ 程序执行错误 : static executable calls DLL library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886476/