【问题标题】:static library dependencies静态库依赖
【发布时间】:2010-10-22 19:33:33
【问题描述】:

我在 Windows 平台上有一个静态库(.lib 文件),我想知道构建 lib 时 CRT 库的依赖版本。我没有 .lib 文件的源代码,有什么想法吗?

提前致谢, 乔治

【问题讨论】:

    标签: static dependencies


    【解决方案1】:

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

    但是,假设库是 MS 格式,您应该能够通过在文本编辑器中打开库来查看构建库的标志(在执行此操作之前进行备份)。您正在寻找这样的一行:

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

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

    【讨论】:

    • 我在静态链接 foo.lib 时遇到以下错误,错误信息是 --warning LNK4098: defaultlib 'LIBCMT' conflict with use of other libs;使用 /NODEFAULTLIB:library,知道根本原因是什么?
    • 是的,其中一个库和/或应用程序是使用多线程支持构建的,另一个则不是。您需要使用相同的线程模型构建所有库和应用程序。
    • 我很困惑,你刚才提到静态库与运行时库无关(调试/发布/单线程/多线程),为什么链接器认为静态库依赖于不同类型的线程模型运行时,并报告此错误?有什么方法可以查看静态库是基于哪种运行时库?
    • 感谢您的回答,1.所以根本原因是,静态库是使用某些版本的运行时库编译的,与运行时库的其他部分冲突,因此决定使用哪个版本的运行时库并在编译过程中执行,而不是链接过程,对吗? 2.如何查看静态库是用哪个运行时库版本编译的?
    • 顺便说一句:我在 VSTS 2008 中用二进制编辑器打开了静态库文件,我搜索了 cl.exe,但什么也没找到。有任何想法吗? :-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2011-09-19
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多