如何将预建库添加到 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++ 解决方案?的主要内容,如果未能解决你的问题,请参考以下文章