c++ - C++ 程序执行错误 : static executable calls DLL library

标签 c++ dll static g++

尝试在 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/

相关文章:

javascript - 访问 ES6 类中静态 setter 中的类数据

c++ - 如何使用 Microsoft 应用程序验证程序

dll - 如何反编译.dll文件?

python - GAE Python : Static Files not loading in localhost,,但当应用程序部署到 appspot 时加载完全正常

c# - 为什么我的 .NET 应用程序不加载位于添加到 PATH 环境变量的文件夹中的程序集?

c++ - 在 DLL 中转发导出函数的问题

c++ - 将静态变量对象初始化为相同的值

c++ - 如何将 vector 写入文件以供执行程序时使用? (c++)

c++ - boost::checked_delete 的目的

c++ - 为什么 C++ 设计者选择不允许非成员运算符 ()()?