Форум программистов, компьютерный форум CyberForum.ru

Компиляция библиотеки libxml под c++ - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
31.01.2014, 11:24     Компиляция библиотеки libxml под c++ #1
Под libxml есть библиотека xmlwrapp позволяющая работать с libxml под с++. Проблема в ее компиляции: по адресу
Кликните здесь для просмотра всего текста
http://libxmlplusplus.sourceforge.net/
скачал исходники и с помощью msbuild собрал через master.proj либы, подключил к своему проекту, но он ругается на "undefined reference" вызываемых функций.
Подключил вроде правильно (работаю под qt, но думаю это не имеет значения), сами libxml работают вполне. В самих либах остались ссылки на obj файлы проекта xmlwrapp.

Прошу помощи, в чем может быть проблема?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2014, 11:24     Компиляция библиотеки libxml под c++
Посмотрите здесь:

Библиотеки под С++ для реализации SOAP 1.2 C++
C++ Компиляция серьезной графики под Mingw
Компиляция под Windows x64 C++
C++ Компиляция dll библиотеки
Проверка валидности в libxml++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
31.01.2014, 11:37     Компиляция библиотеки libxml под c++ #2
Как подключал библиотеку?
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
31.01.2014, 11:44  [ТС]     Компиляция библиотеки libxml под c++ #3
C++ (Qt)
1
2
3
4
INLUDEPATH += .../include
 
LIBS += ... \
       .../xmlwrapp.lib
... - некоторый путь или библиотека.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
31.01.2014, 12:32     Компиляция библиотеки libxml под c++ #4
Сбрось лог ошибок. Какие конкретно функции не находит.
castaway
Эксперт С++
4842 / 2981 / 367
Регистрация: 10.11.2010
Сообщений: 11,013
Записей в блоге: 10
Завершенные тесты: 1
31.01.2014, 12:35     Компиляция библиотеки libxml под c++ #5
А расширение у неё точно .lib ? Не .a ?
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
31.01.2014, 12:46  [ТС]     Компиляция библиотеки libxml под c++ #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 минуты
Цитата Сообщение от castaway Посмотреть сообщение
А расширение у неё точно .lib ? Не .a ?
Да, .lib, тк собрана под виндой под VS10(пробовал и под 2012). libxml так же собранные под студией вполне себе работают.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
31.01.2014, 12:49     Компиляция библиотеки libxml под c++ #7
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Да, .lib, тк собрана под виндой под VS10(пробовал и под 2012). libxml так же собранные под студией вполне себе работают.
Собственно в это и проблема. Нельзя С++ библиотеки собранные в VS линковать в minGW из-за разного ABI.

Либо использовать Qt для VS. Либо, что проще, собрать xmlwrapp для mingw. Саму libxml пересобирать не надо, так как она написана на С и ABI языка С переносим между компиляторами.
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
31.01.2014, 20:51  [ТС]     Компиляция библиотеки libxml под c++ #8
Цитата Сообщение от DrOffset Посмотреть сообщение
Собственно в это и проблема. Нельзя С++ библиотеки собранные в VS линковать в minGW из-за разного ABI.
А почему libxml и libxslt скомпилированные под VS работают?

Добавлено через 14 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Либо использовать Qt для VS. Либо, что проще, собрать xmlwrapp для mingw. Саму libxml пересобирать не надо, так как она написана на С и ABI языка С переносим между компиляторами.
Дошло... Проблема, мозгов не хватит, под mingw перекомпилировать.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
31.01.2014, 22:56     Компиляция библиотеки libxml под c++ #9
Цитата Сообщение от dBuSh83 Посмотреть сообщение
А почему libxml и libxslt скомпилированные под VS работают?
Это вообще отдельная и давняя проблема. Сейчас многие разработчики компиляторов делают шаги в сторону получения единого ABI для С++, но совершенства ждать придется долго. Intel C++ Compiler например имеет совместимость c VS C++. А MinGW такой совместимости не имеет. У C++Builder тоже свой вариант ABI не совместимый ни с тем ни с другим. Зато тот же Intel C++ Compiler, но уже под *nix имеет совместимость с тамошним G++ (GCC), с ним же совместим Clang. Подробнее про это - тут.

Вообще стандартный способ под Windows писать кросскопиляторные ООП библиотеки - использовать COM. Я понимаю, что это не твой случай, просто к сведению.

Добавлено через 10 минут
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Проблема, мозгов не хватит, под mingw перекомпилировать.
Надо подставить MSYS по этой инструкции, а потом поменять ему дефолтный компилятор на тот, который поставляется с Qt. В той же инструкции есть примеры сборки разных библиотек.
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
02.02.2014, 14:48  [ТС]     Компиляция библиотеки libxml под c++ #10
Цитата Сообщение от DrOffset Посмотреть сообщение
Надо подставить MSYS по этой инструкции, а потом поменять ему дефолтный компилятор на тот, который поставляется с Qt
Надеюсь, разберусь! Спасибо за помощь!
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
17.02.2014, 14:47  [ТС]     Компиляция библиотеки libxml под c++ #11
Из исходников посредством мейкфайлов и mingw удалось без MSYS собрать libxml2, но с libxslt уже пошли проблемы: в виде "undefined reference to xsltEvalAVT"... Проверил зависимости - все объявлено и вполне все должно компилиться.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
17.02.2014, 18:56     Компиляция библиотеки libxml под c++ #12
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Из исходников посредством мейкфайлов и mingw удалось без MSYS собрать libxml2, но с libxslt уже пошли проблемы: в виде "undefined reference to xsltEvalAVT"... Проверил зависимости - все объявлено и вполне все должно компилиться.
Надо бы удостовериться, что либа собиралась именно С компилятором, а не С++, и линковалась как С библиотека, а не как С++. Если либа используется в С++ коде, надо проверить наличие extern "C" у вызовов из библиотеки.
В общем можно выложить получившийся бинарь, посмотрим вместе
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
18.02.2014, 14:13  [ТС]     Компиляция библиотеки libxml под c++ #13
Скомпилировал с игнорированием ошибок: нет только libxslt.dll файла. На счет extern "C" - проверял - все есть. Собиралась gcc: раз не g++ - значит, как я понял, Сишным компилятором.
Вложения
Тип файла: zip libxml2.zip (2.18 Мб, 11 просмотров)
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
18.02.2014, 14:22     Компиляция библиотеки libxml под c++ #14
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Скомпилировал с игнорированием ошибок: нет только libxslt.dll файла. На счет extern "C" - проверял - все есть. Собиралась gcc: раз не g++ - значит, как я понял, Сишным компилятором.
Посмотрел сейчас таблицу экспорта и функции xsltEvalAVT в твоих сборках библиотек не нашел. Может быть версии заголовочных файлов разные? В смысле в студии и в mingw.
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
18.02.2014, 15:48  [ТС]     Компиляция библиотеки libxml под c++ #15
Цитата Сообщение от DrOffset Посмотреть сообщение
Посмотрел сейчас таблицу экспорта и функции xsltEvalAVT в твоих сборках библиотек не нашел.
Не знаю, выносится она или нет, но для других функций она используется.
Цитата Сообщение от DrOffset Посмотреть сообщение
Может быть версии заголовочных файлов разные? В смысле в студии и в mingw.
Не совсем понял, что имеется в виду.
Миниатюры
Компиляция библиотеки libxml под c++  
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
18.02.2014, 17:12     Компиляция библиотеки libxml под c++ #16
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Не знаю, выносится она или нет, но для других функций она используется.
Я сейчас собрал libxml2 (2.9.0), libxslt и libexslt (1.1.28). Во-первых все собралось без ошибок (mingw 4.7.2, MSYS). Во-вторых я посмотрел таблицу экспорта у получившихся библиотек и функцию xsltEvalAVT там нашел. Значит у тебя один из двух вариантов:
1) Что-то не так пошло в сборке и функция не попала в экспорт (например где-то оказались более старые версии заголовочных файлов libxslt и они подцепились вместо тех, что шли в исходниках).
2) Каким либо образом цепляется другая версия libxslt вместо нужной.
Вложения
Тип файла: rar xmllibs-mingw32-4.7.2.rar (637.5 Кб, 9 просмотров)
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
20.02.2014, 14:14  [ТС]     Компиляция библиотеки libxml под c++ #17
Цитата Сообщение от DrOffset Посмотреть сообщение
Что-то не так пошло в сборке и функция не попала в экспорт (например где-то оказались более старые версии заголовочных файлов libxslt и они подцепились вместо тех, что шли в исходниках).
Исходники с офф сайта брал - не должно быть заголовочников кривых.
Цитата Сообщение от DrOffset Посмотреть сообщение
Каким либо образом цепляется другая версия libxslt вместо нужной.
Вот это уже не знаю.
Цитата Сообщение от DrOffset Посмотреть сообщение
Я сейчас собрал libxml2 (2.9.0), libxslt и libexslt (1.1.28). Во-первых все собралось без ошибок (mingw 4.7.2, MSYS). Во-вторых я посмотрел таблицу экспорта у получившихся библиотек и функцию xsltEvalAVT там нашел.
А как под msys их собирать? Что-то читал по этому поводу, но толком не понял.
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
20.02.2014, 14:37     Компиляция библиотеки libxml под c++ #18
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Исходники с офф сайта брал - не должно быть заголовочников кривых.
Так не в этом дело. Может уже есть установленная версия где-то и он ее видит, вместо той, которая нужна.
Предположение просто, такое бывает иногда.

Цитата Сообщение от dBuSh83 Посмотреть сообщение
А как под msys их собирать? Что-то читал по этому поводу, но толком не понял.
В домашний каталог пользователя в msys распаковать скачанные архивы (msys/home/username - username - имя юзера в системе).
Запустить msys.
Перейти в первый архив, сделать
./configure --prefix=/usr
mingw32-make
mingw32-make install
В каталоге lib после этого будет лежать собранная библиотека импорта, в bin - dll`ка, в include - заголовочные файлы.
Аналогично со второй библиотекой.
dBuSh83
5 / 5 / 0
Регистрация: 10.07.2013
Сообщений: 99
20.02.2014, 15:09  [ТС]     Компиляция библиотеки libxml под c++ #19
Цитата Сообщение от DrOffset Посмотреть сообщение
Так не в этом дело. Может уже есть установленная версия где-то и он ее видит, вместо той, которая нужна.
Предположение просто, такое бывает иногда.
Понял. Поискал, вроде ничего не нашел, но тоже, кто его знает, как она прописана может быть.

И еще вот такой вопрос: для чего *.la файлы, вроде и без них нормально прикручиваются?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 15:13     Компиляция библиотеки libxml под c++
Еще ссылки по теме:

MinGW подключение библиотеки lib из под Windows C++
Компиляция библиотеки через make.exe C++
C++ Компиляция под 32 битный процессор

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DrOffset
6425 / 3799 / 880
Регистрация: 30.01.2014
Сообщений: 6,592
20.02.2014, 15:13     Компиляция библиотеки libxml под c++ #20
Цитата Сообщение от dBuSh83 Посмотреть сообщение
И еще вот такой вопрос: для чего *.la файлы, вроде и без них нормально прикручиваются?
Да это текстовые файлы. Там прописаны опции для линкера (la - если мне не изменяет склероз - это linker attributes). Можно без них.
Yandex
Объявления
20.02.2014, 15:13     Компиляция библиотеки libxml под c++
Ответ Создать тему
Опции темы

Текущее время: 06:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru