相关疑难解决方法(0)

导入库如何工作?细节?

我知道这对极客来说似乎很基础.但我想说清楚.

当我想使用Win32 DLL时,通常我只需要调用像LoadLibrary()和GetProcAdderss()这样的API.但最近,我正在使用DirectX9进行开发,我需要添加d3d9.lib,d3dx9.lib等文件.

我听说LIB用于静态链接,DLL用于动态链接.

所以我目前的理解是LIB包含方法的实现,并在链接时静态链接作为最终EXE文件的一部分.虽然DLL在运行时动态加载,但不是最终EXE文件的一部分.

但有时候,DLL文件会附带一些LIB 文件,因此:

  • 这些LIB文件是什么?
  • 他们如何实现他们的意图?
  • 有没有工具可以让我检查这些LIB文件的内部?

更新1

检查维基百科后,我记得这些LIB文件称为导入库.但我想知道它如何与我的主应用程序和动态加载的DLL一起工作.

更新2

正如RBerteig所说,LIB文件中存在一些与DLL一起出现的存根代码.所以调用序列应该是这样的:

我的主要应用 - > LIB中的stub - >真正的目标DLL

那么这些LIB应包含哪些信息?我能想到以下几点:

  • LIB文件应包含相应DLL的完整路径; 因此DLL可以由运行时加载.
  • 每个DLL导出方法的入口点的相对地址(或文件偏移量?)应该在存根中编码; 因此可以进行正确的跳转/方法调用.

我对吗?还有什么吗?

顺便说一句:有没有可以检查导入库的工具?如果我能看到它,就不会再有疑惑了.

c c++ windows visual-c++

76
推荐指数
2
解决办法
3万
查看次数

相当于Linux中的导入库

在Windows C ++中,当您要链接到DLL时,必须提供一个导入库。但是在GNU构建系统中,当您想链接.so文件时,就相当于您不希望使用的dll。为什么是这样?是否有等效的Windows导入库。

注意:我并不是说要在Windows中使用GNU C ++的情况,在这种情况下还必须使用导入库。分割线是在Windows C ++和Linux C ++之间。

c++ linux windows gnu

2
推荐指数
2
解决办法
886
查看次数

标签 统计

c++ ×2

windows ×2

c ×1

gnu ×1

linux ×1

visual-c++ ×1