如何将预建库添加到 VC++ 解决方案?

Posted

技术标签:

【中文标题】如何将预建库添加到 VC++ 解决方案?【英文标题】:How to add prebuilt library to a VC++ solution? 【发布时间】:2009-06-21 07:26:16 【问题描述】:

如果您在 VC++ 2008 中为它创建一个项目并将其与解决方案中的其他项目一起构建,那么在 VC++ 2008 中使用库非常容易,但是如果该库的构建过程过于复杂并且必须通过 makefile 单独编译怎么办?

我的库就是这样,虽然我在命令行上编译它没有问题,但我不知道如何处理生成的头文件和 .lib 文件。我将它们全部放在一个目录中,并将其路径添加到我的主项目的附加包含目录中,因此它可以很好地找到头文件。我还将相关信息添加到附加库目录和附加依赖项。

除了这三个之外,也许还有另一个我忘记设置的设置?我会很感激我能得到的所有帮助。谢谢。

EDIT这是我遇到的语法错误:

http://pastebin.com/m72ece684

【问题讨论】:

为什么不能在 IDE 中构建? 这个库很大很复杂,它的源文件分散在很大的目录层次结构中,所以我认为我不能从那里构建它。它带有一个 configure.pl 脚本,该脚本会生成一个相当长的 makefile。 【参考方案1】:

好的,基于这些错误,它与查找 .lib 文件无关,它会卡在头文件上。

编辑:

看起来好像在 windows.h 的某个地方,有一个 X942_DH_PARAMETERS 的宏定义正在破坏你的 dl_group.h。

不要将您的植物头文件放在顶部,而是将 windows.h 放在顶部,然后在 #include 植物头文件之前添加以下行:

#undef X942_DH_PARAMETERS

或者正如我刚刚发现的那样,该宏是在 wincrypt.h 中定义的,如果您将 NOCRYPT 添加到您的预处理器定义中,它将不会包含该文件。由于您使用的是第三方加密库,因此您可能不需要 wincrypt。

【讨论】:

对不起,我忘了说我也这样做了。我将使用收到的错误修改原始帖子。您的意思是我的主项目或我构建的库中缺少预处理器定义吗? 我根据您的错误更新了我的答案。如果这是一个预处理器定义问题,它将与您的主项目有关。 复制我在makefile中找到的任何预处理器定义是否简单?我在其中看到的唯一一个是/D_CONSOLE。这是植物生成的完整的makefile:pastebin.com/m210064f3 顺便说一句,我将 /DBOTAN_DLL= 添加到 makefile 中,以便将其构建为静态库。不确定这是否会有所不同。 嗯,实际上可能是这样。将 BOTAN_DLL 添加到您的预处理器定义中。如果它在类定义中使用它作为修饰符,如果它没有设置为空宏,则很可能会破坏它。【参考方案2】:

虽然我不能准确说出您的问题是什么,但我可以就如何找到解决方案提供一些建议。我建议创建一个包含单个方法和单个类的简单库,构建它,然后尝试将其成功链接到您的项目。一旦你在较小的规模上完成了这项工作,请尝试对你的原始库重复这些步骤。

【讨论】:

【参考方案3】:

对于 msvc 编译器可以添加

#pragma comment(lib, "MYLIBNAME.lib")

在您的标题中。这将自动使链接器在“附加库目录”中查找“MYLIBNAME.lib”。

如果不再出现错误

找不到标题... 找不到 MYLIBNAME.lib

问题可能与其他一些问题有关,例如错误的 C 运行时、调试版本不匹配......

P.S.:如果 lib 在解决方案树中只是设置对 lib 的依赖,将导致 VS 将 targetpath 添加到 libfolder 并将 libname 添加到库。

【讨论】:

以上是关于如何将预建库添加到 VC++ 解决方案?的主要内容,如果未能解决你的问题,请参考以下文章

如何将预单元测试步骤添加到我的*** Makefile.am?

将预编译的二进制文件捆绑到电子应用程序中

html 将预加载器添加到Divi网站

在 VC6 上构建 GStreamer 时找不到文件

vc2010的项目迁移到vc2019,解决编译错误问题

VC添加文件到工程出错问题--FileTool.dll