GCC - 链接到另一个文件夹中的库有效,但二进制文件不会运行
GCC - linking to a library in another folder works but binary won't run
我正在做一个C++项目,该项目生成多个EXE和多个DLL。为了整洁起见,我希望在 Lib 文件夹中生成这些 DLL,因此构建的项目如下所示:
MyProject
----myExe1.exe
----myExe2.exe
----Lib
----myLib1.dll
----myLib2.dll
我能够成功地将 DLL 内置到 Lib 文件夹中,并且我能够使用 EXE 的链接命令中的-L..binLib
成功链接到新位置的 DLL。但是,当我实际运行 EXE 时,他们抱怨找不到有问题的 DLL。
从我所做的研究来看,看起来即使我可以链接到其他文件夹中的库,加载它们仍然需要它们与二进制文件位于同一文件夹中。
GCC,链接库,没有找到? 建议这只是事情的本意,但提到"系统必须能够找到 DLL;即它必须位于当前工作目录中,在路径中的目录中,或者其目录必须添加到用于此事物的特殊环境变量中"。引用了什么"特殊环境变量"(我假设它不是 %PATH%,或者注释之前不会特别提到路径),有没有办法设置它以便我的 DLL 可以正确加载?
有关 DLL 搜索顺序的完整信息在 MSDN 站点上: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682586%28v=vs.85%29.aspx
简短版本:在 DLL 加载期间,操作系统按以下顺序搜索它:
- 从中加载应用程序的目录。
- 系统目录(即 C:\Windows\System32)
- 16 位系统目录。
- Windows 目录(即 C:\Windows)
- 当前目录。
- PATH 环境变量中列出的目录。
因此,如果要将exe文件与dll分开,则必须将包含库的文件夹放入PATH中。另一个选项是使用 LoadLibraryEx http://msdn.microsoft.com/en-us/library/windows/desktop/ms684179%28v=vs.85%29.aspx 进行动态 DLL 加载
相关文章:
- 正在读取二进制文件(is_open)
- 在C++中将类(带有Vector成员)保存为二进制文件
- 如何从二进制文件中读取字符串
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- Android 在编译二进制文件时重建静态库
- 在 C++ 中将双精度变量写入二进制文件
- clang 的 libFuzzer 可以在同一二进制文件中测试超过 1 个 API 吗?
- C++:实际上不是从二进制文件中读取
- 如何从二进制文件中的给定符号中获取调用程序图
- 将内部带有矢量的结构保存/读取到二进制文件中
- 编译多个C++文件.调用二进制文件以运行代码
- 如何使用位字段将数据从二进制文件复制到结构中?
- uint8_t同一二进制文件的不同十进制值
- C++单个生成文件多个二进制文件
- 尝试将数字写入二进制文件时引发异常
- 通过套接字发送二进制文件.文本文件有效,其他文件无效
- GCC - 链接到另一个文件夹中的库有效,但二进制文件不会运行
- Linux,介绍如何运行子二进制文件并有效地传递有效负载
- 将对象保存到二进制文件中的有效方法