我在 Windows XP 上使用 gcc 编译器(MinGW)。libdir.dll
我创建了一个 .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()
库中的函数,链接器是否首先仅映射到该函数或整个库的内存?