为什么有些程序需要 .lib 和 .dll 才能运行

2024-04-16

当我要设置我的开发环境时(SDLSimple DirectMediaLayer),我下载了网站提供的包,从readme.txt文件我发现我需要两者.lib and .dll...

我的问题是:

  1. 我不确定我的理解是否正确:在我看来,.lib for windows就好像.a for linux, is 静态库, and .dll for windows就好像.so for linux, is 共享库, 它是否正确 ?
  2. 如果上面的想法是正确的,我想我们只能使用.lib or .dll,既然他们做的工作是一样的?那么为什么要费心去同时获得两个呢在一个程序中 ?
  3. 我不太明白.dll,如果我没记错的话,优点之一是shared library它们可以在程序运行时更新吗?如果我们更新.dll文件,怎么可以一个正在运行的程序来了解一下的变化.dll并将其重新加载到内存中?

在VC中,有两种库。

第一种类型是“真实库”,由“静态库项目”生成,其中包含可以链接和运行的所有内容,无需 dll。

第二种是“导入库”,由“dll项目”生成,只包含link.exe需要的符号。您可以链接到该库,但需要 dll 才能运行。

使用 dll 有两种方法。链接到“导入库”或“使用 LoadLibrary API”。

加载 dll 后,您无法更改 dll 文件。

但是如果使用LoadLibrary加载dll,则可以使用FreeLibrary卸载dll,更改dll然后使用LoadLibrary加载新的dll。当然,您需要监视某些内容才能调用此过程。

更简单的方法是,使用加载程序进行更新,然后加载真正的 exe。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么有些程序需要 .lib 和 .dll 才能运行 的相关文章

  • 如何查看共享库加载的顺序

    给定一个 ELF 二进制文件或共享对象 我如何才能最轻松地查看所需共享库的加载顺序 它们是否按照列出的顺序加载readelf d 我怎样才能最容易地看到所需共享库的加载顺序 Use LD DEBUG LD DEBUG files bin l
  • 在共享库中不使用 PLT 的情况下调用另一个目标文件中的函数?

    我有两个汇编代码 code1 s and code2 s我想从这两个构建一个可重定位 使用 fPIC 开关 共享库 I want code2 s调用一个函数 名为myfun1 其定义在code1 s 当我使用call myfun1 PLT
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 如何将dll作为服务运行?

    我知道如何编写 dll 如何编写服务以及如何运行 dllrundll32 但现在我想编写一个在Windows中作为服务安装的dll 我不知道这是否可能或应该导出 dll 中的哪个函数 如何将 dll 作为服务安装并运行 有几种不同的方法可以
  • 具有重复符号的 C++ 插件库上的段错误

    我有一个跨平台 C 应用程序 它分为多个共享库 并从插件共享库加载附加功能 插件库应该是自包含的并自行运行 无需了解或依赖于调用应用程序 其中一个插件包含从主应用程序复制的代码 因此包含与引擎中的符号名称重复的符号名称 是的 我知道这通常是
  • 制作系统应用时无法加载.so库文件

    我创建了一个应用程序 它将是系统应用 当我正常安装应用程序 而不是系统应用程序 时 将加载 so 文件 但是当我通过将 apk 放入 system app 使其成为系统应用程序时 我收到以下错误 01 09 00 20 26 889 E A
  • 如何使用额外的目标文件重新链接现有共享库

    我现有的 Linux 共享对象文件 共享库 已被删除 我想生成一个新版本的库 其中包含一些附加功能 我本来希望像下面这样的东西会起作用 但没有 ld o newlib so newfuncs o whole archive existing
  • 0xc000007b“应用程序无法正确启动”错误?

    我在 Visual Studio 2019 中编写了一个 C 控制台应用程序 并尝试将其部署到另一台 Windows 笔记本电脑 两台笔记本电脑均运行最新的 64 位 Windows 10 我的目标笔记本电脑已安装 最新的 NET Fram
  • dll:静态链接与隐式链接,一样吗?

    关于Dll链接 静态链接和隐式链接是一回事吗 我理解隐式链接和显式链接之间的区别 并且我认为静态与隐式链接同义 但我不确定 如果它们确实不同 它们之间有什么区别 以及我如何指定我想要哪一个 this link http msdn micro
  • F#:Microsoft.FSharp.Data.TypeProviders 是否需要配置文件 47?

    这是后续我昨天的帖子 https stackoverflow com questions 30399773 f fsc error fs2024 static linking may not use assembly that target
  • 从命令行运行本机 VS2012/C++ 64 位单元测试

    我正在尝试从命令行运行单元测试 我尝试使用以下命令使用 mstest exe 程序 E VS Projects gt C Program Files x86 Microsoft Visual Studio 11 0 Common7 IDE
  • DLL 需要访问其应用程序的符号

    在 C 中 DLL 是否可以访问加载它的应用程序的某些符号 我有一个加载插件 dll 的应用程序 这些插件需要访问该应用程序的某些API 是否可以在不创建共享此 API 的新 DLL 的情况下实现此目的 函数指针结构适合这种情况吗 示例 主
  • 在 Windows 安装项目中注册和取消注册 DLL

    我有几个 dll 文件需要在安装 卸载 Windows 安装程序时分别注册 取消注册 我尝试了以下方法 创建一个 bat 文件来注册 dll 问题是我无法在安装项目中使用 自定义操作 添加 bat 文件 另外 如何在卸载时运行注销dll 请
  • 32 位键盘挂钩意外地在 64 位应用程序中工作,但挂起 Outlook

    我已经读了很多关于这个问题的文章 但情况却变得更加混乱 我有一个 32 位应用程序 它安装了 KeyboardHook 来等待全局热键并唤醒 在 Win 7 x64 版本上运行它 我注意到按下热键时它会挂起 Outlook x64 版本 所
  • Oracle DataAccess 相关:“动态程序集中不支持调用的成员。”

    据我了解 此类错误已在 SO 上讨论过多次 有些人认为这是 DLL 文件中的错误 有些人通过更改 DLL 版本来解决 其他人似乎没有任何线索 无论如何 我只是发帖试试运气 在 C GUI 上的网格中选择一行时 我的应用程序崩溃了 stack
  • 转储 Windows DLL 版本的命令行工具?

    我需要一个命令行工具来转储标准 Windows DLL 版本信息 以便我可以通过 bash 脚本 Cygwin 对其进行处理 作为一名 Java 开发人员 我不太习惯 Microsoft 开发工具 尽管我对 Microsoft Visual
  • 从 Python 调试 C 库 (ctypes)

    我有一个使用 ctypes 和 C 共享库 dll 文件 的 Python 程序 作为 IDE 我使用 Eclipse 其中将开发两个项目 C 共享库和使用它的 python 程序 我的想法是 当我在调试模式下启动Python程序时 我可以
  • 编写一个加载 msvcr80.dll 并公开 free() 函数的 DLL

    我有一个依赖于 MSVCR80 的第三方 DLL 并分配我需要清理的资源 图书馆有not暴露一个free 执行此操作的函数 相反 我需要加载相同的运行时库并手动调用free功能 作为一种解决方法 我尝试编写一个 包装器 DLL 它加载正确的
  • 如何使用waf构建共享库?

    我想使用构建一个共享库waf http code google com p waf 因为它看起来比 GNU 自动工具更容易 更简洁 到目前为止 我实际上有几个与我开始编写的 wscript 有关的问题 VERSION 0 0 1 APPNA
  • dll 的 App.config

    我们有一个 引擎 可以动态加载 dll 无论位于某个目录中的什么 并通过反射的方式从中调用工作流类 我们现在有一些需要访问数据库的新工作流程 因此我想将配置文件放在 dll 目录中 但由于某种原因 我的工作流程看不到配置文件

随机推荐