Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
1

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

31.01.2014, 11:24. Показов 4062. Ответов 32
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Под libxml есть библиотека xmlwrapp позволяющая работать с libxml под с++. Проблема в ее компиляции: по адресу
Кликните здесь для просмотра всего текста
http://libxmlplusplus.sourceforge.net/
скачал исходники и с помощью msbuild собрал через master.proj либы, подключил к своему проекту, но он ругается на "undefined reference" вызываемых функций.
Подключил вроде правильно (работаю под qt, но думаю это не имеет значения), сами libxml работают вполне. В самих либах остались ссылки на obj файлы проекта xmlwrapp.

Прошу помощи, в чем может быть проблема?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2014, 11:24
Ответы с готовыми решениями:

Компиляция dll библиотеки
Как правильно скомпилировать dll библиотеку, чтобы имена методов не изменялись? Например, у меня...

Компиляция, линковка, статические и динамические библиотеки
Доброго вам времени суток. Обращаюсь к вам со списком близких по теме вопросов. Если вам не сложно,...

Создание/компиляция статической .Lib библиотеки С++
Здравствуйте, Пытаюсь разобраться, как вообще создавать или скомпилировать сторонние статические...

Компиляция библиотеки через make.exe
Скачал исходный код библиотеки oglft-0.9, скачал make-3.81.exe, не могу понять как скомпилировать,...

32
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
31.01.2014, 11:37 2
Как подключал библиотеку?
0
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
31.01.2014, 11:44  [ТС] 3
C++ (Qt)
1
2
3
4
INLUDEPATH += .../include
 
LIBS += ... \
       .../xmlwrapp.lib
... - некоторый путь или библиотека.
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
31.01.2014, 12:32 4
Сбрось лог ошибок. Какие конкретно функции не находит.
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
31.01.2014, 12:35 5
А расширение у неё точно .lib ? Не .a ?
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 минуты
Цитата Сообщение от castaway Посмотреть сообщение
А расширение у неё точно .lib ? Не .a ?
Да, .lib, тк собрана под виндой под VS10(пробовал и под 2012). libxml так же собранные под студией вполне себе работают.
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
31.01.2014, 12:49 7
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Да, .lib, тк собрана под виндой под VS10(пробовал и под 2012). libxml так же собранные под студией вполне себе работают.
Собственно в это и проблема. Нельзя С++ библиотеки собранные в VS линковать в minGW из-за разного ABI.

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

Добавлено через 14 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
Либо использовать Qt для VS. Либо, что проще, собрать xmlwrapp для mingw. Саму libxml пересобирать не надо, так как она написана на С и ABI языка С переносим между компиляторами.
Дошло... Проблема, мозгов не хватит, под mingw перекомпилировать.
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
31.01.2014, 22:56 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. В той же инструкции есть примеры сборки разных библиотек.
1
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
02.02.2014, 14:48  [ТС] 10
Цитата Сообщение от DrOffset Посмотреть сообщение
Надо подставить MSYS по этой инструкции, а потом поменять ему дефолтный компилятор на тот, который поставляется с Qt
Надеюсь, разберусь! Спасибо за помощь!
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
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Из исходников посредством мейкфайлов и mingw удалось без MSYS собрать libxml2, но с libxslt уже пошли проблемы: в виде "undefined reference to xsltEvalAVT"... Проверил зависимости - все объявлено и вполне все должно компилиться.
Надо бы удостовериться, что либа собиралась именно С компилятором, а не С++, и линковалась как С библиотека, а не как С++. Если либа используется в С++ коде, надо проверить наличие extern "C" у вызовов из библиотеки.
В общем можно выложить получившийся бинарь, посмотрим вместе
0
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
18.02.2014, 14:13  [ТС] 13
Скомпилировал с игнорированием ошибок: нет только libxslt.dll файла. На счет extern "C" - проверял - все есть. Собиралась gcc: раз не g++ - значит, как я понял, Сишным компилятором.
Вложения
Тип файла: zip libxml2.zip (2.18 Мб, 12 просмотров)
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
18.02.2014, 14:22 14
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Скомпилировал с игнорированием ошибок: нет только libxslt.dll файла. На счет extern "C" - проверял - все есть. Собиралась gcc: раз не g++ - значит, как я понял, Сишным компилятором.
Посмотрел сейчас таблицу экспорта и функции xsltEvalAVT в твоих сборках библиотек не нашел. Может быть версии заголовочных файлов разные? В смысле в студии и в mingw.
0
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
18.02.2014, 15:48  [ТС] 15
Цитата Сообщение от DrOffset Посмотреть сообщение
Посмотрел сейчас таблицу экспорта и функции xsltEvalAVT в твоих сборках библиотек не нашел.
Не знаю, выносится она или нет, но для других функций она используется.
Цитата Сообщение от DrOffset Посмотреть сообщение
Может быть версии заголовочных файлов разные? В смысле в студии и в mingw.
Не совсем понял, что имеется в виду.
Миниатюры
Компиляция библиотеки libxml под c++  
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
18.02.2014, 17:12 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 Кб, 10 просмотров)
1
5 / 5 / 1
Регистрация: 10.07.2013
Сообщений: 99
20.02.2014, 14:14  [ТС] 17
Цитата Сообщение от DrOffset Посмотреть сообщение
Что-то не так пошло в сборке и функция не попала в экспорт (например где-то оказались более старые версии заголовочных файлов libxslt и они подцепились вместо тех, что шли в исходниках).
Исходники с офф сайта брал - не должно быть заголовочников кривых.
Цитата Сообщение от DrOffset Посмотреть сообщение
Каким либо образом цепляется другая версия libxslt вместо нужной.
Вот это уже не знаю.
Цитата Сообщение от DrOffset Посмотреть сообщение
Я сейчас собрал libxml2 (2.9.0), libxslt и libexslt (1.1.28). Во-первых все собралось без ошибок (mingw 4.7.2, MSYS). Во-вторых я посмотрел таблицу экспорта у получившихся библиотек и функцию xsltEvalAVT там нашел.
А как под msys их собирать? Что-то читал по этому поводу, но толком не понял.
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
20.02.2014, 14:37 18
Цитата Сообщение от dBuSh83 Посмотреть сообщение
Исходники с офф сайта брал - не должно быть заголовочников кривых.
Так не в этом дело. Может уже есть установленная версия где-то и он ее видит, вместо той, которая нужна.
Предположение просто, такое бывает иногда.

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

И еще вот такой вопрос: для чего *.la файлы, вроде и без них нормально прикручиваются?
0
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
20.02.2014, 15:13 20
Цитата Сообщение от dBuSh83 Посмотреть сообщение
И еще вот такой вопрос: для чего *.la файлы, вроде и без них нормально прикручиваются?
Да это текстовые файлы. Там прописаны опции для линкера (la - если мне не изменяет склероз - это linker attributes). Можно без них.
1
20.02.2014, 15:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.02.2014, 15:13
Помогаю со студенческими работами здесь

Компиляция под Windows x64
Здравствуйте есть 2 компьютера на 1 стоит х32 на котором компилируется программа а на другом х64...

Компиляция под 32 битный процессор
В общем название темы говорит само за себя. У меня стоит Win 7 64x разрядная и MS VS 2013. Когда я...

Компиляция серьезной графики под Mingw
Возьмем для примера gdi+ (c всем остальным у меня получалось абсолютно тоже. только winapi из...

Компиляция проекта под linux из windows
Скорее всего раздел не подходит, просто не знаю к какому это относится больше... Вот есть проект...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru