5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
1 | |
Компиляция библиотеки libxml под c++31.01.2014, 11:24. Показов 4062. Ответов 32
Метки нет (Все метки)
Под libxml есть библиотека xmlwrapp позволяющая работать с libxml под с++. Проблема в ее компиляции: по адресу
Кликните здесь для просмотра всего текста
http://libxmlplusplus.sourceforge.net/
Подключил вроде правильно (работаю под qt, но думаю это не имеет значения), сами libxml работают вполне. В самих либах остались ссылки на obj файлы проекта xmlwrapp. Прошу помощи, в чем может быть проблема?
0
|
31.01.2014, 11:24 | |
Ответы с готовыми решениями:
32
Компиляция dll библиотеки Компиляция, линковка, статические и динамические библиотеки Создание/компиляция статической .Lib библиотеки С++ Компиляция библиотеки через make.exe |
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
||||||
31.01.2014, 11:44 [ТС] | 3 | |||||
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
31.01.2014, 12:32 | 4 |
Сбрось лог ошибок. Какие конкретно функции не находит.
0
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
31.01.2014, 12:46 [ТС] | 6 |
Кликните здесь для просмотра всего текста
Код
debug/main.o: In function `main': D:\QtProject\NetBrowser\Test\untitled/main.cpp:97: undefined reference to `xml::throw_on_error' D:\QtProject\NetBrowser\Test\untitled/main.cpp:97: undefined reference to `xml::tree_parser::tree_parser(char const*, xml::error_handler&)' D:\QtProject\NetBrowser\Test\untitled/main.cpp:98: undefined reference to `xml::tree_parser::get_document()' D:\QtProject\NetBrowser\Test\untitled/main.cpp:101: undefined reference to `xml::throw_on_error' D:\QtProject\NetBrowser\Test\untitled/main.cpp:101: undefined reference to `xslt::stylesheet::stylesheet(char const*, xml::error_handler&)' D:\QtProject\NetBrowser\Test\untitled/main.cpp:104: undefined reference to `xml::throw_on_error' D:\QtProject\NetBrowser\Test\untitled/main.cpp:104: undefined reference to `xslt::stylesheet::apply(xml::document const&, xml::error_handler&)' D:\QtProject\NetBrowser\Test\untitled/main.cpp:106: undefined reference to `xml::operator<<(std::ostream&, xml::document const&)' D:\QtProject\NetBrowser\Test\untitled/main.cpp:101: undefined reference to `xslt::stylesheet::~stylesheet()' D:\QtProject\NetBrowser\Test\untitled/main.cpp:106: undefined reference to `xml::tree_parser::~tree_parser()' D:\QtProject\NetBrowser\Test\untitled/main.cpp:101: undefined reference to `xslt::stylesheet::~stylesheet()' D:\QtProject\NetBrowser\Test\untitled/main.cpp:106: undefined reference to `xml::tree_parser::~tree_parser()' debug/main.o: In function `_tcf_1': c:/Qt/include/xmlwrapp/init.h:130: undefined reference to `xml::init::~init()' debug/main.o: In function `_tcf_2': c:/Qt/include/xsltwrapp/init.h:93: undefined reference to `xslt::init::~init()' debug/main.o: In function `_static_initialization_and_destruction_0': c:/Qt/include/xmlwrapp/init.h:130: undefined reference to `xml::init::init()' debug/main.o: In function `_static_initialization_and_destruction_0': Makefile.Debug:77: recipe for target 'debug\untitled.exe' failed c:/Qt/include/xsltwrapp/init.h:93: undefined reference to `xslt::init::init()' collect2.exe: error: ld returned 1 exit status mingw32-make[1]: Leaving directory 'D:/QtProject/NetBrowser/Test/untitled' makefile:34: recipe for target 'debug' failed mingw32-make[1]: *** [debug\untitled.exe] Error 1 mingw32-make: *** [debug] Error 2 12:40:33: ѕроцесс ЂC:\Qt\Qt5.2.0\Tools\mingw48_32\bin\mingw32-make.exeї завершилс€ с кодом 2. ќшибка при сборке/установке проекта untitled (комплект: Desktop Qt 5.2.0 MinGW 32bit) ¬о врем€ выполнени€ этапа Ђ—боркаї 12:40:33: ѕрошло времени: 00:02. По быстрому набросал: он, таким образом, не видит ни одну функцию. Добавлено через 2 минуты Да, .lib, тк собрана под виндой под VS10(пробовал и под 2012). libxml так же собранные под студией вполне себе работают.
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
31.01.2014, 12:49 | 7 |
Собственно в это и проблема. Нельзя С++ библиотеки собранные в VS линковать в minGW из-за разного ABI.
Либо использовать Qt для VS. Либо, что проще, собрать xmlwrapp для mingw. Саму libxml пересобирать не надо, так как она написана на С и ABI языка С переносим между компиляторами.
1
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
31.01.2014, 20:51 [ТС] | 8 |
А почему libxml и libxslt скомпилированные под VS работают?
Добавлено через 14 минут Дошло... Проблема, мозгов не хватит, под mingw перекомпилировать.
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
31.01.2014, 22:56 | 9 |
Это вообще отдельная и давняя проблема. Сейчас многие разработчики компиляторов делают шаги в сторону получения единого ABI для С++, но совершенства ждать придется долго. Intel C++ Compiler например имеет совместимость c VS C++. А MinGW такой совместимости не имеет. У C++Builder тоже свой вариант ABI не совместимый ни с тем ни с другим. Зато тот же Intel C++ Compiler, но уже под *nix имеет совместимость с тамошним G++ (GCC), с ним же совместим Clang. Подробнее про это - тут.
Вообще стандартный способ под Windows писать кросскопиляторные ООП библиотеки - использовать COM. Я понимаю, что это не твой случай, просто к сведению. Добавлено через 10 минут Надо подставить MSYS по этой инструкции, а потом поменять ему дефолтный компилятор на тот, который поставляется с Qt. В той же инструкции есть примеры сборки разных библиотек.
1
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
02.02.2014, 14:48 [ТС] | 10 |
0
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
17.02.2014, 14:47 [ТС] | 11 |
Из исходников посредством мейкфайлов и mingw удалось без MSYS собрать libxml2, но с libxslt уже пошли проблемы: в виде "undefined reference to xsltEvalAVT"... Проверил зависимости - все объявлено и вполне все должно компилиться.
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
17.02.2014, 18:56 | 12 |
Надо бы удостовериться, что либа собиралась именно С компилятором, а не С++, и линковалась как С библиотека, а не как С++. Если либа используется в С++ коде, надо проверить наличие extern "C" у вызовов из библиотеки.
В общем можно выложить получившийся бинарь, посмотрим вместе
0
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
18.02.2014, 14:13 [ТС] | 13 |
Скомпилировал с игнорированием ошибок: нет только libxslt.dll файла. На счет extern "C" - проверял - все есть. Собиралась gcc: раз не g++ - значит, как я понял, Сишным компилятором.
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
18.02.2014, 14:22 | 14 |
Посмотрел сейчас таблицу экспорта и функции xsltEvalAVT в твоих сборках библиотек не нашел. Может быть версии заголовочных файлов разные? В смысле в студии и в mingw.
0
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
18.02.2014, 15:48 [ТС] | 15 |
Не знаю, выносится она или нет, но для других функций она используется.
Не совсем понял, что имеется в виду.
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
18.02.2014, 17:12 | 16 |
Я сейчас собрал libxml2 (2.9.0), libxslt и libexslt (1.1.28). Во-первых все собралось без ошибок (mingw 4.7.2, MSYS). Во-вторых я посмотрел таблицу экспорта у получившихся библиотек и функцию xsltEvalAVT там нашел. Значит у тебя один из двух вариантов:
1) Что-то не так пошло в сборке и функция не попала в экспорт (например где-то оказались более старые версии заголовочных файлов libxslt и они подцепились вместо тех, что шли в исходниках). 2) Каким либо образом цепляется другая версия libxslt вместо нужной.
1
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
20.02.2014, 14:14 [ТС] | 17 |
Исходники с офф сайта брал - не должно быть заголовочников кривых.
Вот это уже не знаю. А как под msys их собирать? Что-то читал по этому поводу, но толком не понял.
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
20.02.2014, 14:37 | 18 |
Так не в этом дело. Может уже есть установленная версия где-то и он ее видит, вместо той, которая нужна.
Предположение просто, такое бывает иногда. В домашний каталог пользователя в msys распаковать скачанные архивы (msys/home/username - username - имя юзера в системе). Запустить msys. Перейти в первый архив, сделать Аналогично со второй библиотекой.
1
|
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
|
|
20.02.2014, 15:09 [ТС] | 19 |
Понял. Поискал, вроде ничего не нашел, но тоже, кто его знает, как она прописана может быть.
И еще вот такой вопрос: для чего *.la файлы, вроде и без них нормально прикручиваются?
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
20.02.2014, 15:13 | 20 |
Да это текстовые файлы. Там прописаны опции для линкера (la - если мне не изменяет склероз - это linker attributes). Можно без них.
1
|
20.02.2014, 15:13 | |
20.02.2014, 15:13 | |
Помогаю со студенческими работами здесь
20
Компиляция под Windows x64 Компиляция под 32 битный процессор Компиляция серьезной графики под Mingw Компиляция проекта под linux из windows Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |