我目前正在阅读"C编程语言第2版",我不清楚这个练习:
可以实现像isupper这样的函数以节省空间或节省时间.探索两种可能性.
我会很感激对此提出一些建议.
我在 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()库中的函数,链接器是否首先仅将该函数或整个库映射到内存?