【问题标题】:Linking MBCS and Unicode libraries together将 MBCS 和 Unicode 库链接在一起
【发布时间】:2012-10-06 16:30:11
【问题描述】:

我有一个用 ISO C++ 编写的库。它不使用 Winapi、TCHAR 或类似的东西。我目前正在将其构建为一个静态库,其字符集设置为 Unicode。我打算将它链接到其他库,其中一些使用 Unicode 构建,一些 - MBCS。

在这种情况下,我是否需要创建两个配置并构建两个版本(MBCS 和 Unicode)?

【问题讨论】:

    标签: c++ visual-studio visual-studio-2012


    【解决方案1】:

    这不是问题。使用 utf-16 编码的 Unicode 字符串的代码使用 wchar_t*,使用传统 8 位编码的代码使用 char*。对编译器和链接器都没有歧义。该设置存在的唯一原因是因为 Windows 标头和非标准 <tchar.h> 包含将 typedef(如 TCHAR)转换为这些字符串类型中的任何一种的宏,由 UNICODE 和 _UNICODE #defines 引导。

    当然,从使用 char* 字符串的程序中使用这个库将是一个巨大的皮塔饼。程序必须翻译字符串,注意强制转换是不行的。

    【讨论】:

    • 所有的混合都是一种痛苦。从 Unicode 到 MBCS,您可能根本无法翻译某些字符串
    • 这是一个技术性更强的问题。例如,我很难将使用不同版本的 Visual Studio 构建的库和使用静态运行时 (/MT) 构建的库与使用动态运行时 (/MD) 构建的库链接在一起。我只是有一种感觉,即使在这种情况下,链接器也会发出嘶嘶声。在我自己的库中,文本处理通常是模板化的,因为我们现在有 4 种字符类型(char、wchar_t、char16_t 和 char32_t),标准库为所有这些类型提供了必要的特征。
    • 好吧,但这不是你问的。停止有“感觉”,真正尝试一下,让你知道
    • 也许我不清楚,抱歉。当我有机会时,我肯定会对此进行测试。
    • 是的,我刚刚创建了一个新的空库,只有一个要测试的函数。我能够以 MBCS 模式将此库链接到 Unicode 应用程序,反之亦然。没有链接器错误。
    猜你喜欢
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多