如何在C++中"添加引用"

Joh*_*ant 14 c++ dll visual-studio

我是C++的新手,而且我完全没有得到的东西.在C#中,如果我想使用外部库,例如log4net,我只需添加对log4net DLL的引用,它的成员就可以自动使用(以及IntelliSense中).如何在非托管C++中执行此操作?

jal*_*alf 24

通常,除了.dll之外,库还带有1)头文件(.h)和2).lib文件.

头文件在代码中是#include',以便您访问库中的类型和函数声明.

.lib链接到您的应用程序(项目属性 - >链接器 - >输入,其他依赖项).

.lib文件通常包含简单的存根,可以自动加载dll和转发函数调用.

如果您没有.lib文件,则必须使用LoadLibrary函数来动态加载DLL.


ova*_*nes 9

基本概念如下:有两种类型的库:静态和动态.它们之间的区别在于链接构建步骤中的静态库将它们的编译代码嵌入到可执行文件(或dll)中; 动态库只是嵌入指向函数的指针和一个指令,当程序加载时应该加载一些dll.这是由链接器为您实现的.

现在您可以决定要使用哪两个.DLL具有许多优点和缺点.如果开发一个庞大的应用程序,可能值得考虑使用延迟加载的DLL而不是静态库.有些库只是作为DLL交付给你,你别无选择.无论如何,初学者最简单的方法是使用静态库.这将使您的部署和测试更容易,因为在处理DLL时您必须确保在运行时找到它们(即使使用调试器),这涉及复制一个目录中的所有内容或处理路径变量.

通常,DLL提供程序(如果您打算应该能够处理库)会为您提供一个头文件和一个包含对所需DLL的调用的.lib.某些供应商(例如boost)只要求您包含头文件,lib会自动链接到您的可执行文件(可以通过编译器prorietary pragma指令实现).如果不是这种情况,则必须进入C++项目的项目设置(项目属性/配置属性/链接器/输入),并将lib文件名输入"附加依赖项"行,例如iced.lib iceutild.lib.您还可以在其中放置完全限定的路径名​​.请注意,您必须输入两个配置的lib文件名(Debug,Release).这是您使用静态库和Dll同样执行的过程.DLL的唯一区别是DLL lib要么位于app-directory中,要么位于其中一个路径目录中.

在该步骤之后,如果您尝试链接不兼容的库,您仍可能会遇到编译器错误.原因很多,为什么它们可能不兼容.但是尝试首先以这种方式链接lib并查看是否有效.如果没有,请在此处再次发布您的错误;)

包含文件(以前)用于包含在您想要使用smth的地方.来自lib.只需包含它,编译器就会知道符号必须来自另一个(编译的)编译单元(编译的cpp-file =>目标文件)或.lib.如果找不到所需的符号,它将查找并通知您.

好运,
Ovanes

PS这可能在开始时很难,但是当你习惯它时,它会很容易.


Dan*_*ker 5

C++ 没有您所想象的那种库。它有您需要的头文件#include,还有链接器处理的称为库的东西,其中包含编译后的代码。您需要将库(.LIB 文件)添加到链接器设置中。

在 Windows 上,如果您使用 DLL,理想情况下您应该有一个 .LIB 文件与之配合,称为 DLL 的导入库,然后将该 .LIB 文件添加到链接器设置中。