是否可以将VS2019中内置的共享静态库与VS2010项目链接?

时间:2019-05-26 08:39:54

标签: regex visual-studio-2010 visual-c++ shared-libraries

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

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

请注意,我下面的界面未使用任何C ++标准库。这只是一个带有字符数组输入的简单类。我当时在想,如果将re2.lib编译为共享的静态链接库,然后将其与我的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;
};

2 个答案:

答案 0 :(得分:0)

该消息是尝试将VS2010中创建的export .lib与VS2019中的代码链接的结果。从VS2012开始,不再支持该功能。

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

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

前者需要源代码可用性,而后者则需要所有依赖库都存在,这也可能会为导入函数查找名称带来麻烦。

答案 1 :(得分:0)

不幸的是,简短的答案是“否”,至少对于旧版本的Visual C ++而言不是,如下所述:

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

此致