C++ 程序执行错误:静态可执行文件调用 DLL 库

Execution error on a C++ program: static executable calls DLL library

我在尝试 运行 使用 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.

中编译和 运行ning 这个软件时我完全没有遇到任何错误

有什么想法吗?我知道静态可执行文件不可能调用动态库。为什么那个错误?如何解决?

-static 会导致 linker 更喜欢静态库而不是动态库。但它不会将 DLL 转换为静态库。通常当您已经拥有同一个库的静态和动态版本时使用它。

看起来你的文件libgsl_dll_d.lib是一个DLL导入库。 DLL 导入库的目的是允许 DLL 像静态库一样使用。它不是 DLL 的静态版本。因此,当您 link 使用它时,它最终使用 DLL 也就不足为奇了!