我需要一个正则表达式库,该正则表达式库可以为必须在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;
};
答案 0 :(得分:0)
该消息是尝试将VS2010中创建的export .lib与VS2019中的代码链接的结果。从VS2012开始,不再支持该功能。
使用.dll的可能解决方案是:
前者需要源代码可用性,而后者则需要所有依赖库都存在,这也可能会为导入函数查找名称带来麻烦。
答案 1 :(得分:0)
不幸的是,简短的答案是“否”,至少对于旧版本的Visual C ++而言不是,如下所述:
C++ Binary Compatibility between Visual Studio 2015 and Visual Studio 2019 The Great C Runtime (CRT) Refactoring
此致