gpt4 book ai didi

c++ - 动态链接时,应用程序如何知道要加载哪个 DLL 文件?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:50:27 25 4
gpt4 key购买 nike

我想构建一个包含符号表的自定义 zlib DLL。我使用 MinGW,DLL 工作正常,确实包含符号表,但必须将其命名为 zlib1.dll 才能工作。我想将它命名为 zlib1-debug.dll 以区别于常规的剥离版本。如何通知我的应用程序加载重命名的 DLL?我不想使用 LoadLibrary 函数。我还从用于创建 DLL 的目标文件中创建了一个 libz-debug.a 文件。当我编译一个应该使用新 DLL 的示例程序时,我将 -lz-debug 传递给链接器。它编译没有错误,但是当我运行它时它仍然想要加载“zlib1.dll”。我预计它会尝试加载“z-debug.dll”,但显然它不是这样工作的。

最佳答案

构建动态库时,通常至少会得到两个文件:

  • 库本身(例如.dll.so)
  • 导出库(例如分别为.lib.a)

然后,当您构建使用它的应用程序或其他库时,您需要将 .lib/.a 文件添加到链接器的输入(依赖项)列表中。现在,问题是,在应用程序启动期间加载的动态库文件(.dll/.so)的名称在链接过程中保存在导出库中 - 那是应用程序如何“知道”,它应该从哪个库加载符号。我想,您至少有以下问题之一:

  • 您没有从链接器输入中删除旧的导出文件,所以仍然请求旧的库
  • 您没有将导出文件添加到链接器输入
  • 你把事情搞砸了,以重命名的导出文件结束,无论如何它指的是旧库

我建议你:

1. 使用新名称 (z-debug) 重新编译您的 zlib 以确保导出文件引用正确的库文件.

2. 重建您的应用程序(它只会被重新链接),指定新的库名称(因此它将链接到具有新名称的库)。

关于c++ - 动态链接时,应用程序如何知道要加载哪个 DLL 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com