Можно ли связать общую статическую библиотеку, созданную в VS2019, с проектом VS2010? - PullRequest
0 голосов
/ 26 мая 2019

Мне нужна библиотека регулярных выражений, которая может возвращать субматчи для проекта, который должен быть построен на VS 2010. Под субматчами я подразумеваю для этого регулярного выражения: "(\ w +): (\ d +)" применено к этой входной строке " олень: 1234 ", состояние совпадения - истина, и я хочу получить содержимое двух подсовпадений -" олень "и" 1234 ". В Visual Studio 2010 нет регулярных выражений, поэтому я попытался создать Google RE2 в Visual Studio 2019 в качестве общей статической библиотеки, а затем создать простой интерфейс (см. Ниже), чтобы предоставить мне минимальные необходимые мне функции. Очевидно, что он прекрасно работает в 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 ]

1 голос
/ 31 мая 2019

К сожалению, короткий ответ - нет, по крайней мере, в старых версиях Visual C ++, как описано ниже:

Двоичная совместимость C ++ между Visual Studio 2015 и Visual Studio 2019 Рефакторинг Great C Runtime (CRT)

С уважением,

1 голос
/ 26 мая 2019

Сообщение является результатом попытки связать экспорт .lib, созданный в VS2010, с кодом в VS2019. С VS2012 больше не поддерживается.

Возможные решения для использования .dll:

  1. Перекомпилируйте .dll или экспортируйте .lib, используя новый компилятор.
  2. Загружать библиотеку динамически.

Первому требуется наличие исходного кода, а второму необходимо, чтобы присутствовали все зависимые библиотеки, также может возникнуть проблема поиска имени для импортируемых функций.

...