windows 如何包含一个只提供.h和.dll文件(没有.lib)的c++库?

fzwojiic  于 2022-11-30  发布在  Windows
关注(0)|答案(1)|浏览(247)

我正在一个c项目中工作,需要包含IPE library。这是可用的here,因为我使用Windows,所以我下载并解压了Windows二进制包。这提供了一个包含头文件的“include”文件夹,以及一个包含几个.dll文件的“bin”文件夹,其中包括ipe.dll。
根据我的理解(例如,从here中,您需要做三件事来链接库:
1.如果库的头文件不在任何默认的include目录中,您可以告诉编译器在哪里找到它们。
1.告诉链接器链接库。
1.如果库不在链接器的默认搜索目录之一中,您可以告诉链接器在哪里可以找到它。
我使用Visual Studio 2022,这些事情都是在项目设置中完成的。步骤1很简单,一旦我在项目设置中将“include”文件夹添加到“Additional Include Directories”中,它就可以识别我的#include<ipelib.h>。但是,对于步骤2和步骤3,我认为我需要链接一个.lib文件,该文件在任何地方都没有提供。
简单地只链接头文件并将.dll文件放在我的输出文件夹中(因此跳过步骤2和3)是不起作用的,这会导致加载LNK 2019“未解析的外部符号”错误。
我尝试只链接ipe.dll文件(在Linker/Input/Additional Dependencies中添加ipe.dll),但在构建时出现以下错误:Error LNK1107 invalid or corrupt file: cannot read at 0x340 CGALTest C:\Program Files\IPE\ipe-7.2.26\bin\ipe.dll。这种方法似乎不正确,我所知道的.dll和.lib文件。然而,也许这是要走的路,这个损坏的文件错误是由以下原因引起的,在this页上提到:
C
要求它必须使用与编译Ipe相同的编译器进行编译。如果您使用Windows二进制Ipe发行版,这意味着您必须使用g++-mingw-w 64-x86-64工具链。
我觉得这会产生一个不同的错误(当实际使用程序时,而不是构建程序时),但我不确定,所以我在这里提到它是为了完整性。如果这真的是问题所在,我不知道如何实际 * 使用g++-mingw-w 64-x86-64工具链 *,但这是完全不同的问题。
我也试着像here解释的那样自己创建.lib文件,但是也不起作用。IPElib文档从未提到这一点。
我知道这不是一个很有名的图书馆,但我希望无论如何都会有人知道如何提供帮助。

juzqafwq

juzqafwq1#

您需要一个.lib来链接。该.lib知道如何动态解析. dll中的符号。如果您没有.lib,则需要自己动态加载符号。
请参阅:Dynamically load a function from a DLL

相关问题