LINUX.ORG.RU

Сборка с libxml2

 


0

1

Что-то не могу собрать проект с libxm2 в ubuntu 14.04.

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libxml2.a(xpath.o): 
неопределённая ссылка на символ «fmod@@GLIBC_2.2.5»
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: 
DSO missing from command line

★★★★★

А какова строка вызова компилятора, приведшая к ошибке? (make V=1, make VERBOSE=1)

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Хрен его знает. Я через cmake собираю.

INCLUDE (FindLibXml2)
...
FIND_PACKAGE (LibXml2)
INCLUDE_DIRECTORIES (${LIBXML2_INCLUDE_DIR})
LIST (APPEND ADDITIONAL_LIBS ${LIBXML2_LIBRARIES})
...
TARGET_LINK_LIBRARIES (${APP_NAME} ${LIBXML2_LIBRARIES})
hibou ★★★★★ ()
Ответ на: комментарий от intelfx

-rdynamic -lgtk-3 -lgdk-3 -latk-1.0 -lgio-2.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lpango-1.0 -lcairo -lgobject-2.0 -lgthread-2.0 -lglib-2.0 -Wl,-Bstatic -lxml2 -Wl,-Bdynamic

hibou ★★★★★ ()
Ответ на: комментарий от hibou

Попробуй добавить libm в конец списка библиотек.

intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

Добавил libm, libz. Ошибок еще больше :)

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libxml2.a(xzlib.o): In function `xz_decomp':
(.text+0x5dc): undefined reference to `lzma_code'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libxml2.a(xzlib.o): In function `xz_make':
(.text+0x9c5): undefined reference to `lzma_properties_decode'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libxml2.a(xzlib.o): In function `xz_make':
(.text+0xbf9): undefined reference to `lzma_auto_decoder'
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libxml2.a(xzlib.o): In function `__libxml2_xzclose':
(.text+0x1695): undefined reference to `lzma_end'

hibou ★★★★★ ()
Ответ на: комментарий от hibou

Продолжаем цепочку при помощи liblzma. Но как-то это неправильно. По идее, библиотеки должны сами подтягивать собственные зависимости. Где-то, видимо, используется чёрная тулчейновская магия, причём используется неправильно...

intelfx ★★★★★ ()
Ответ на: комментарий от intelfx

Хотя это всё ошибки из libxml2. Судя по всему, зависимости пофачились только у неё. Меня напрягает, что она линкуется принудительно статически (-Wl,-Bstatic -lxml2 -Wl,-Bdynamic)...

intelfx ★★★★★ ()

ldd /usr/lib64/libxml2.so

смотри, что из этого ты забыл и не задавай глупые вопросы.

anonymous ()

А зачем ты статикой линкуешься?

Reset ★★★★★ ()
Ответ на: комментарий от Reset

Думаю, что по незнанию. Подскажите, как через cmake слинковать libxml2 динамически?

hibou ★★★★★ ()

ЯННП

Ты свой код хочешь слинковать с libxml2, поставленной из репы? Или ты хочешь сам собрать libmxl2?

Stil ★★★★★ ()
Ответ на: ЯННП от Stil

Свой код хочу слинковать с libxml2 из репы. -dev пакеты стоят все.

hibou ★★★★★ ()
Ответ на: комментарий от hibou
INCLUDE (FindLibXml2)
...
FIND_PACKAGE (LibXml2)
INCLUDE_DIRECTORIES (${LIBXML2_INCLUDE_DIR})
LIST (APPEND ADDITIONAL_LIBS ${LIBXML2_LIBRARIES})
...
TARGET_LINK_LIBRARIES (${APP_NAME} ${LIBXML2_LIBRARIES})

INCLUDE (FindLibXml2) - wtf ?

LIST (APPEND ADDITIONAL_LIBS ${LIBXML2_LIBRARIES}) - не понятно зачем вообще?

по моему должно быть как-то так.

find_package(LibXml2)
include_directories(${LIBXML2_INCLUDE_DIR})
add_definitions(${LIBXML2_DEFINITIONS})
target_link_libraries(${APP_NAME} ${LIBXML2_LIBRARIES})

dhampire ★★★ ()
Ответ на: комментарий от hibou

-dev пакеты стоят все.

Видимо мало, в дебиане и убунте любят всегда на 9000 пакетов всё бить. Должен обязательно быть установлен сам файл libxml2.so.x.y.z и ссылки на него libxml2.so и libxml2.so.x. Если их нет, то будет использоваться libxml2.a. Если используется libxml2.a, то в команду линковки должны быть добавлены все библиотеки, что вписаны как NEEDED в секцию динамик libxml2.so.x.y.z (readelf -d libxml2.so.x.y.z).

d_a ★★★★★ ()
Последнее исправление: d_a (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.