有什么方法可以使Microsoft Visual Studio内置的静态库与使用过的CRT无关(带有调试支持/没有调试支持)?

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

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

有什么办法可以避免这种情况?也许我做错了什么?

最佳答案

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

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

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

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

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

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

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

10-13 07:05
查看更多