Как мне заставить PCRE работать с C ++? - PullRequest
9 голосов
/ 13 октября 2010

Это вопрос новичка, но я надеюсь, что смогу выразить свой вопрос настолько четко, насколько это возможно.

Я пытаюсь выполнить сопоставление с образцом в C ++.

Я загрузил версию PCRE для Win32 с здесь и поместил загруженные файлы pcre3.dll и pcreposix3.dll в папку lib библиотеки Dev-CPP (яm с использованием Bloodshed Dev-C ++ 4.9.9 IDE).

Я также скачал заголовочный файл pcrecpp.h и поместил его в тот же каталог. Я пишу следующий код (на самом деле не пишу. Я копирую пример кода из учебника PDF с именем PCRE-PerlСовместимый регулярный экспресс).

Но я не могу заставить его работать.Код выглядит следующим образом:

    #include <iostream>
    #include <string>
    #include <pcrecpp.h>

    using namespace std;

    int main()
    {
       int i;
       string s;
       pcrecpp::RE re("(\\w+):(\\d+)");
       if (re.error().length() > 0) {
          cout << "PCRE compilation failed with error: " << re.error() << "\n";
       }
       if (re.PartialMatch("root:1234", &s, &i))
       cout << s << " : " << i << "\n";
    }

Когда я компилирую код, Dev-C ++ выдает мне много ошибок, в том числе: «pcrecpp» не был объявлен »и« RE »не объявлен.

Как мне поступить с загруженными файлами и исправить мою проблему?Или есть что-то очевидное, чего мне не хватает?

Ответы [ 4 ]

6 голосов
/ 13 октября 2010

Если вы укажете файл для #include в угловых скобках (<>), то компилятор будет искать этот заголовок только в расположениях для внешних библиотек, насколько это известно компилятору.Если вместо этого вы используете кавычки (""), то компилятор также будет искать места для текущего проекта, который обычно включает текущий каталог.

Быстрое решение вашей текущей проблемы:использовать

#include "pcrecpp.h"

Альтернативой является указание компилятору, где он может найти заголовки библиотеки PCRE. Вам нужно будет указать компилятору, где он может найти заголовки библиотеки PCRE.Как это сделать, отличается от сборки системы для сборки системы, но если вы используете IDE, то где-то должна быть возможность указать «Включить каталоги».Здесь вы добавляете каталог заголовков PCRE (с полным путем).


В качестве дополнительного примечания: Когда компилятор выдает большое количество ошибок и предупреждений, всегда начинайте с исправленияпервый.Я предполагаю, что в этом случае это было что-то вроде «не удалось найти заголовок: pcrecpp.h».Часто бывает так, что, если компилятор пытается продолжить работу после возникновения проблемы, обнаруживается больше проблем, которые являются последующими проблемами первой.Когда первая проблема решена, они также волшебным образом исчезают.

2 голосов
/ 27 мая 2012
         cout << “PCRE compilation failed with error: “ << re.error() << “\n”;

Я просто скопировал ваш код и попытался скомпилировать его. Я получил ту же ошибку, о которой вы сообщили. Проблема заключается в том, что строка, которую вы поместили в cout, не была правильно запущена / закончена. Вы должны использовать реальные "вместо знаков, которые выглядят как двойные кавычки ("), но это не так. Если вы это исправите, ваш код должен компилироваться без ошибок.

2 голосов
/ 11 апреля 2011

g ++ -lpcrecpp ......

вам нужно добавить '-lpcrecpp' к команде g ++

0 голосов
/ 13 октября 2010

Вы включили

#include <pcrecpp.h> 

1-ую точку для проверки, но есть ли файл в неточном пути вашего кода.Вы загрузили установочный файл?Проверьте, где он был установлен на вашем компьютере.

2-й пункт - проверить, определены ли пути к библиотекам, чтобы их можно было разрешить во время компиляции и компоновки.

...