gpt4 book ai didi

c - API 和 "-ldllname"编译器选项的运行时链接

转载 作者:行者123 更新时间:2023-11-30 14:24:17 25 4
gpt4 key购买 nike

我使用LoadlibraryGetprocaddress来链接一些WinApis以进行运行时链接。正如预期的那样,它工作得很好。

但对于某些 API,我只是使用 -ldllname 作为编译器选项。相同的选项会给某些 API 带来链接器错误,并且需要加载 dll。

这有什么特别的区别吗,即某些特定的 API 需要运行时链接,而其他 API 将使用 -ldllname 选项?如何对此类 API 进行分类?

Update: What I observed is the APIs supporting UNICODE and ANSI i.e., The API which is suffixed with "W" and "A" , get resolved with static linking itself? Am I correct? Correct me if I am wrong!

why some APIs need Run time linking and others get resolved with Static linking itself(-l option)? Any reason for this?

最佳答案

I used Loadlibrary

这是一个对 DLL 进行隐式依赖的示例。 LoadLibrary 是由 kernel32.dll(Windows api DLL)导出的函数。它实际上存在两个版本,LoadLibraryA 和 LoadLibraryW。分别是该函数的非 Unicode 和 Unicode 版本。您将得到其中之一,具体取决于编译时是否#define UNICODE 宏。

这与使用 GetProcAddress 动态链接导出完全相反,您必须使用 -l 选项告诉链接器您的程序依赖于 kernel32。在运行时,DLL 在您自己的代码开始运行之前自动加载。

对操作系统 DLL 存在隐式依赖是很正常的。而且不可避免的是,你永远无法动态链接 kernel32.dll,这将是一个先有鸡还是先有蛋的问题。

关于c - API 和 "-ldllname"编译器选项的运行时链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983352/

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