Парсер Gumbo в C++ Builder XE6

Я пытаюсь использовать парсер HTML - Gumbo (написанный на C) в моем проекте C++ Builder XE6.

Когда я компилирую, я получаю много ошибок (Объявление E2140 здесь не разрешено и т. д.), которые, похоже, исходят из файла char_ref.rl.

Я много пытался избежать этих ошибок, но мне это не удалось.

Кто-нибудь когда-нибудь использовал Gumbo в проекте C++ Builder или, по крайней мере, в проекте C++?

Спасибо


person mvezinet    schedule 06.03.2015    source источник
comment
После некоторых тестов я думаю, что проблема в том, что сборщик C++ не выдерживает C99 при использовании extern C , так как я могу удалить ошибки, перемещая объявления... Я понятия не имею, почему, и я не знаю, как справиться эта проблема (я искал в параметрах проекта, но не нашел ничего подходящего)   -  person mvezinet    schedule 06.03.2015
comment
Как вы ожидаете, что кто-либо здесь диагностирует эту проблему, если вы не показали свой код или код библиотеки, который не работает. Как вы думаете, люди побегут и попытаются установить Gumbo сами, просто чтобы увидеть то, что видите вы? Пожалуйста, всегда указывайте всю необходимую информацию в своих вопросах.   -  person Remy Lebeau    schedule 06.03.2015
comment
На самом деле, весь код терпит неудачу, потому что, как я уже сказал, я обнаружил, что компоновщик C++ не позволяет смешивать операторы и объявления. Я не могу показать здесь весь код библиотеки Gumbo. Вот почему я попросил кого-то, кто уже использовал Gombu в проекте C++. Однако спасибо за ваше время.   -  person mvezinet    schedule 09.03.2015


Ответы (1)


Примечание: extern "C" не означает "скомпилировать этот код как C". Это означает, что код C++ внутри блока должен быть скомпилирован таким образом, чтобы любые внешние имена и т. д. публиковались способом, совместимым с C ABI. И такой блок не должен включать никаких определений функций. Возможно, вы неправильно используете extern "C" в своем коде, но трудно сказать, не видя ваш код.

Во всяком случае, часть компилятора C в bcc32.exe, по-видимому, не допускает смешанных операторов и объявлений, даже если вы указываете флаг -An, который должен означать «Использовать ключевые слова и расширения C99».

Вам придется либо сделать 64-битную сборку, либо внести целую кучу изменений в этот исходный код C для совместимости с динозавром, которым является bcc32. Или вы можете собрать Gumbo как DLL с помощью современного компилятора (если он поддерживает эту опцию, IDK).

person M.M    schedule 08.03.2015
comment
Спасибо за ваш ответ. Чего я не понимаю, так это того, что смешивание операторов и объявлений совершенно нормально в тех частях моего кода, где я не использую extern C. Кроме того, это не в моем коде, а в коде Gumbo, поэтому я уверен это правильно используется. Я определенно не могу изменить весь код библиотеки Gumbo. Думаю, сначала попробую с DLL. Хорошего дня. - person mvezinet; 09.03.2015
comment
@mvezinet некоторые файлы в проекте будут иметь расширение .c, а некоторые — .cpp; код в .c (или включенный из .c) не может смешивать объявления и операторы; может другой код. Код Gumbo может предполагать соответствие C99 или, по крайней мере, расширения GCC. - person M.M; 09.03.2015