1
24
通常,除了.dll之外,库还附带1)一个头文件(.h)和2)一个.lib文件。 头文件包含在代码中,使您能够访问库中的类型和函数声明。 .lib链接到应用程序中(项目属性->链接器->输入,其他依赖项)。 .lib文件通常包含自动加载dll并将函数调用转发给它的简单存根。 如果没有.lib文件,则必须使用loadlibrary函数动态加载dll。 |
2
9
基本概念如下: 有两种类型的库:静态和动态。它们之间的区别在于,在链接构建步骤期间,静态库将编译后的代码嵌入到可执行文件(或DLL)中;动态库只嵌入指向函数的指针,以及在加载程序时应加载某些DLL的指令。这是由链接器为您实现的。 现在,您可以决定要使用这两种方法中的哪一种。DLL有许多优点和缺点。如果开发一个巨大的应用程序,可能值得考虑使用延迟加载的DLL而不是静态libs。有些libs只是作为dll传递给您,您别无选择。对于初学者来说,最简单的方法就是使用静态库。这将使部署和测试更加容易,因为在处理DLL时,必须确保在运行时(甚至在使用调试器时)找到它们,这涉及复制一个目录中的所有内容或处理路径变量。
通常,一个DLL提供程序(如果您希望能够处理库)会向您提供一个头文件和一个.lib,其中包含对所需DLL的调用。一些供应商(例如boost)只要求您包含头文件,lib自动链接到可执行文件(可以通过compiler prorietary pragma指令实现)。如果不是这样的话,你必须进入C++项目的项目设置(Project Projials/SturialProvices /链接器/输入),并将LIB文件名输入到“附加依赖项”行中,例如
在这个步骤之后,如果您试图链接不兼容的库,仍然可能会得到编译器错误。有很多原因,为什么它们是不相容的。但首先尝试以这种方式链接lib,看看是否有效。如果没有,请在此处再次发布您的错误;) include file(s)用于包括在希望使用smth的位置。从解放军。只要包含它,编译器就会知道符号必须来自另一个(编译的)编译单元(编译的cpp文件=>对象文件)或.lib。如果找不到所需的符号,它将进行查找并通知您。
祝你好运,
另一方面,这在一开始可能很难,但当你习惯了之后,就很容易了。 |
3
4
C++在你感兴趣的意义上没有图书馆。它有你的头文件
在Windows上,如果您正在使用一个dll,理想情况下您应该有一个.lib文件与之配套,该文件称为dll的导入库,然后将该.lib文件添加到链接器设置中。 |
4
0
您需要做的第一件事是包括描述该库中可用功能的头文件。 库的实际代码将位于以下两个位置之一:
根据库的代码是如何提供给您的(作为.lib文件或作为.dll),您必须:
有时包中会同时包含需要链接到的.lib文件和.dll文件。在这种情况下,您不需要调用LoadLibrary,只需要pragma comment(lib,“libaryfile.lib”),因为在这种情况下.lib将您链接到.dll。 一个非常重要的细节是将DLL放在应用程序可以找到它的地方。Charles Petzold说: 当Windows需要在运行需要的程序之前加载一个dll模块时,库文件必须存储在包含.exe程序、当前目录、Windows系统目录、Windows目录或可通过MS-DOS环境中的路径字符串访问的目录中。(按此顺序搜索目录。) Programming windows, 5th ed MSDN 我不建议使用“项目属性”菜单进行链接,因为链接到的库不太可见。 |
kaiselwyvrn · 我无法打开Visual Studio项目 1 年前 |
Cobra_Fast · 如何查找不必要的空运算符? 2 年前 |
lolorekkk · 面板插入。NET WinForm 2 年前 |