gpt4 book ai didi

C++ Visual Studio 库

转载 作者:搜寻专家 更新时间:2023-10-31 01:21:30 25 4
gpt4 key购买 nike

有什么方法可以使 Microsoft Visual Studio 中构建的静态库独立于使用的 CRT(有/没有调试支持)?

我的意思是,对于简单的 C 库,可以使用 gcc 生成代码,然后在 visual studio 中使用相同的静态库。生成的 library.a 文件完全独立于 /MT/MDd 开关,不会导致警告/链接错误。

与 Visual Studio 默认行为相比,您必须构建同一库的两个版本 - 独立用于调试/ Release模式。如果您尝试在调试配置中使用 Release 版本,反之亦然,这会导致丑陋的警告(warning LNK4098: defaultlib "LIBCMT"...),但有时由于运行时不同而无法编译?

有什么办法可以避免这种情况吗?还是我做错了什么?

最佳答案

要创建一个无论运行时选择如何都将链接的库,有必要使用两个开关:

/MT 针对基本发布运行时构建,/Zl省略默认库名称。

针对 dll 运行时构建将导致编译器使用 __imp_ 修饰所有运行时符号(因此,例如,它将尝试链接到 __imp__fread 而不是 _fread)。因此,您必须选择其中一种静态运行时。

编译器根据所选的库执行隐式默认库编译指示:

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

是它在代码中的样子。/Zl 使编译器从生成的 .obj(以及 .lib)文件中忽略所有这些指令(隐式和显式)。因此结果应该会干净地链接而不会导致默认库冲突。

关于C++ Visual Studio 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3764716/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com