相关疑难解决方法(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万
查看次数

C++:#pragma comment(lib,"XXX")实际上对"XXX"做了什么?

我的背景是C#,但我必须维护一些遗留(MS)C++.在那个代码库中我弄明白:

#pragma comment(lib, "OtherLib700.lib")
Run Code Online (Sandbox Code Playgroud)

其中700是一些版本.除了lib是一个具有相同名称的DLL.

我首先想到的程序将依赖于DLL,但在从系统中删除后,程序仍然有效.但是有一个更新版本的DLL,名为OtherLib900 ...

似乎程序"包含"了lib的代码,因此它不再依赖于外部DLL.(或者程序'自动'使用较新的DLL ...)

哪一个是正确的?是否有办法进一步确认"假设"?

c++ pragma

28
推荐指数
2
解决办法
5万
查看次数

程序静态链接到库但仍需要运行dll

在链接方面有一些我不理解的事情......我正在使用第三方库(GEOS库)编写程序.此程序依赖于geos.lib但仍需要运行geos.dll.

我读了这个问题,我想我理解静态库和动态库之间的区别.我不明白的是为什么我静态链接库时仍然需要一个dll.

c++ dll linkage

19
推荐指数
2
解决办法
1万
查看次数

VS2010:静态链接到单个库中

情况:

我正在使用VS2010构建一个库,它依赖于LibraryA.我只使用LibraryA提供的许多功能之一,所以我想静态链接它.

我正在阅读的所有内容告诉我将整个项目设置为静态链接到MFC,这是我不想做的事情.我的库很好地动态链接到windows DLL; 我只是想静态链接到LibraryA.

闲逛选项窗口,我似乎没有看到这样的选择.真的全有或全无吗?

谢谢,-Ben

visual-studio-2010 static-linking

11
推荐指数
1
解决办法
2万
查看次数

Windows平台上的静态库与导入库

我怎么能告诉一个.lib文件是一个静态库vs一个DLL的导入库?有没有可以做到这一点的工具或命令?

第二个问题是我如何检查静态库的依赖关系,我的意思是我怎么知道这个静态库中包含哪些DLL?

感谢您的帮助.

最好的祝福,

windows static-libraries visual-c++

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

C:与MinGW-w64静态/动态链接的正确方法

直观地:

  • MinGW-w64是GNU编译器工具(GCC等)的Windows端口。
  • Windows的预编译二进制文件是.dll(动态链接)/ .lib(静态链接)。
  • 但是,MinGW-w64使用GNU编译器工具,因此需要.so/ .abinary。

我发现了什么:

不幸的是,我在MinGW和MinGW-w64上找不到明确的文档来说明在动态/静态链接库时正确与错误的地方。

根据我的经验,我一直能够动态链接到.dll。一次,我能够静态链接到.lib(使用-static标志)。

题:

.dll/ .a与MinGW的-W64 GCC工具链编译的二进制文件时拨出动,静链接库?换句话说,为MSVC生成的动态库和为GCC生成的静态库?

windows gcc dynamic-linking mingw-w64

4
推荐指数
1
解决办法
6938
查看次数