【发布时间】:2013-08-22 00:03:24
【问题描述】:
我在 Windows XP 上使用 gcc 编译器 (MinGW)。我创建了一个 .dll 库 libdir.dll,而不是尝试构建一个使用该库的程序。
我不想将该 .dll 文件放入 System 或 System32 文件夹,也不想在 PATH 变量中设置它的路径,我想要的是将该信息提供给程序本身。
我知道有一个 -R 和 -rpath 开关可用,所以我打算将它与其中一个链接。
第一个-rpath:
gcc -L/path/to/lib -Wl,-rpath,/path/to/lib main. o -ldir -o prog比-R:
gcc -L/path/to/lib -Wl,-R,/path/to/lib main. o -ldir -o prog
这成功链接到prog,但是当我启动程序时,Windows 打印出消息,它找不到libdir.dll。
所以我的问题是出了什么问题,为什么在运行时不知道libdir.dll 的路径,即使我使用了适当的开关?
假设我有 prog1 和 prog2,每个都包含自己的 libdir.dll 副本,并且它们都开始同时运行在库中加载代码。内存中发生的情况是加载了两个副本还是链接器计算出了这两个程序都有一个副本并使用它吗?
第二个问题是关于如何加载库(任何操作系统)。链接器总是加载整个库还是只加载需要的部分?例如,如果程序引用库中的函数foo(),链接器是否仅映射到该函数或整个库的内存第一个?
【问题讨论】:
标签: c windows dynamic-linking