【发布时间】:2022-11-30 18:54:11
【问题描述】:
我正在开发一个需要包含 IPE library 的 C++ 项目。这是可用的 here,因为我使用 Windows,所以我下载并解压缩了 Windows 二进制包。这提供了一个包含头文件的“include”文件夹,以及一个包含多个 .dll 文件(其中包括 ipe.dll)的“bin”文件夹。
据我了解(例如来自here,链接库需要做三件事:
- 您告诉编译器在哪里可以找到库的头文件,如果它们不在任何默认的包含目录中。
- 您告诉链接器链接库。
- 您告诉链接器在哪里可以找到库,如果它不在其默认搜索目录之一中。
我使用的是 Visual Studio 2022,这些东西都是在项目设置中完成的。第 1 步很简单,一旦我将“include”文件夹添加到项目设置中的“Additional Include Directories”,它就会识别我的#include<ipelib.h>。然而,对于第 2 步和第 3 步,我认为我需要链接一个 .lib 文件,该文件在任何地方都没有提供。
仅链接头文件并将 .dll 文件放入我的输出文件夹(因此跳过第 2 步和第 3 步)是行不通的,这会导致加载 LNK2019“未解析的外部符号”错误。
我尝试只链接 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-w64-x86-64 工具链。
我觉得这会产生不同的错误(当实际尝试使用该程序时,而不是在构建它时),但我不确定所以我在这里提到它是为了完整性。 如果这真的是问题所在,我不知道该怎么做使用 g++-mingw-w64-x86-64 工具链,但这完全是一个不同的问题。
我也尝试按照here 的解释自己创建 .lib 文件,但这也不起作用。这也让人觉得没有必要; IPElib 文档从未提及这一点。
我意识到这不是一个非常有名的图书馆,但我希望有人知道如何提供帮助。
【问题讨论】: