是否可以 link 使用 VS2010 项目构建在 VS2019 中的共享静态库?

Is it possible to link a shared static library built in VS2019 with a VS2010 project?

我需要一个正则表达式库,它可以 return 为必须在 VS 2010 上构建的项目进行子匹配。通过子匹配,我的意思是这个正则表达式:“(\w+):(\d+)”应用于此输入字符串 "deer:1234",匹配状态为真,我想检索两个子匹配的内容——"deer" 和“1234”。 Visual Studio 2010 没有正则表达式,所以我尝试在 Visual Studio 2019 中构建 Google RE2 作为共享静态库,然后制作一个简单的界面(见下文)为我提供最低限度的功能我需要的。它显然在 Visual Studio 2019 中构建良好,但是当我复制下面显示的 re2.lib 和 header 并尝试将其编译到我的 2010 项目中时,我收到此错误:

错误 LNK2038:检测到“_MSC_VER”不匹配:值“1900”与值“1600”不匹配

请注意,我下面的界面没有使用任何 C++ 标准库。它只是一个带有字符数组输入的简单 class。我在想,如果我将 re2.lib 编译为共享 statically-linked 库,然后 link 它与我的 2010 项目一起使用,它应该可以工作。但是在花了将近 2 天的时间试图让它工作之后,我对其他解决方案持开放态度。我的方法行得通吗?如果行不通,谁能推荐一个在 Visual Studio 2010 年编译的好的正则表达式库?

class RE2;

class __declspec(dllexport) BasicRegex {
public:
    BasicRegex(const char* str);
    ~BasicRegex();

    bool fullMatch(const char* str, char**& submatches, int numsubmatches);
    bool fullMatch(const char* str);
    bool partialMatch(const char* str, char**& submatches, int numsubmatches);
    bool partialMatch(const char* str);

private:
    RE2* gre2;
};

该消息是尝试 link 导出在 VS2010 中使用 VS2019 中的代码创建的 .lib 的结果。从 VS2012 开始不再支持它。

使用 .dll 的可能解决方案是:

  1. 使用新的编译器重新编译 .dll 或导出 .lib。
  2. 动态加载库。

前者需要源可用性,后者需要所有依赖库都存在,也可能会造成查找导入函数名称的问题。

不幸的是,简短的回答是否定的,至少对于旧版本的 Visual C++ 不是这样,如下所述:

C++ Binary Compatibility between Visual Studio 2015 and Visual Studio 2019 The Great C Runtime (CRT) Refactoring

此致,