【发布时间】:2017-12-26 11:42:09
【问题描述】:
据我了解,当 C 程序使用动态链接时,程序的编译版本 (.exe) 会将库的内存地址存储在某处。程序安装在别人的电脑上,是不是库的位置不一样?或者,当你更新库时,它的内存地址不会不同吗?
【问题讨论】:
-
哪个操作系统?
-
这是 WinX 还是 POSIX (ELF)?机制不同
-
.exe 提示 MS 窗口 - 查找的目录有特定顺序 - 在这些 C:\Windows\System32、当前工作目录和 .exe 文件所在的目录中其他一些。不知道是哪个命令了,现在离开窗口太久了……但是,如果库(dll)位于这些目录中的任何一个目录中,程序就会找到它。
-
将库的内存地址存储在某处。当程序安装在别人的计算机上时,库的位置不是不同吗?记住每个进程都有自己的虚拟地址空间。尽管您似乎在这里谈论的是两个不同的概念。动态库的物理位置和库在内存中加载的地址。
-
要考虑的另一件事是现代操作系统随机分配用于加载进程的地址。 en.wikipedia.org/wiki/Address_space_layout_randomization
标签: c++ c dynamic linker libraries