静态库依赖关系

3
我可以帮助您翻译以下内容,涉及IT技术。这段文字讲述了在Windows平台上使用静态库(.lib文件)时,如何确定CRT库的依赖版本。由于没有该.lib文件的源代码,因此需要一些想法和建议。
谢谢, George
1个回答

5

静态库没有这些依赖关系。当库被构建时,它不会以任何方式与运行时链接,它只知道实现头文件中的函数声明,这些声明不提供任何版本信息。

然而,假设该库是MS格式的,则可以通过在文本编辑器中打开该库(在此之前请备份)来查看库所使用的标志。您正在查找类似于以下行:

cl.exe cmd -nologo -MTd -W3 -Gm -GX -ZI -DWIN32 -D_DEBUG  (more stuff)

-MTd 标志告诉您该库是使用多线程调试支持进行编译的。

当我使用foo.lib进行静态链接时,遇到了以下错误,错误信息为--警告LNK4098:缺省库“LIBCMT”与其他库的使用冲突;请使用/NODEFAULTLIB:library,有什么想法是根本原因吗? - George2
是的,其中一个库和/或应用程序是以多线程支持构建的,而另一个则没有。您需要使用相同的线程模型构建所有的库和应用程序。 - anon
你的问题与运行时库无关 - 请把这个想法从你的脑海中排除。正如我所说,你的问题似乎是你的库构建标志在某种程度上与应用程序的构建标志冲突。这不是版本问题。我建议你查看项目设置,并将C++代码生成选项更改为与多线程相关的当前选项相反。 - anon
@Neil,这是一个静态库并且来自旧代码。我正在使用VSTS的二进制编辑器模式打开库文件,并搜索“cl.exe”。也许这种方法是错误的,或者应该使用其他工具? - George2
有一些关于“win32”的搜索结果,例如这个--“/DEFAULTLIB:”msvcprt“/manifestdependency:”type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='amd64'”,顺便说一句:没有简单的方法可以知道一个库是静态库吗? - George2
显示剩余13条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接