проблема линковки / версии с libxerces-c - PullRequest
1 голос
/ 05 июля 2010

Я пытаюсь сделать пример работы инструментария, но после ввода make я получил следующую ошибку:

g++ -o taskintro taskintro.o `PKG_CONFIG_PATH=/usr/local/lib/pkgconfig pkg-config orocos-ocl-gnulinux orocos-rtt-gnulinux --libs` 
/usr/bin/ld: warning: libxerces-c-3.0.so, needed by /usr/local/lib/liborocos-rtt-gnulinux.so, not found (try using -rpath or -rpath-link)
/usr/local/lib/liborocos-rtt-gnulinux.so: undefined reference to `xercesc_3_0::XMLUni::fgXercesContinueAfterFatalError'
.
.
.
collect2: ld returned 1 exit status
make: *** [taskintro] Error 1

У меня установлены следующие версии;

/usr/lib/libxerces-c.so
/usr/lib/libxerces-c.so.28
/usr/lib/libxerces-c.so.28.0
/usr/lib/libxerces-c-3.1.so

Я попытался создать символическую ссылку:

ln -s /usr/lib/libxerces-c-3.1.so libxerces-c-3.0.so

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

Мой make-файл похож на это;

*OROCOS_TARGET = gnulinux
OROPATH = /usr/local
CC = g++
LD = ld
OROFLAGS= -Wall -g `PKG_CONFIG_PATH=${OROPATH}/lib/pkgconfig pkg-config orocos-ocl-${OROCOS_TARGET} orocos-rtt-${OROCOS_TARGET} --cflags` 
OROLIBS = `PKG_CONFIG_PATH=${OROPATH}/lib/pkgconfig pkg-config orocos-ocl-${OROCOS_TARGET} orocos-rtt-${OROCOS_TARGET} --libs` 
all: taskintro
taskintro.o: TaskIntro.cxx ${OROPATH}/include/rtt/os/fosi.h *.hpp
    ${CC} -c ${OROFLAGS} $< -o $@* 

Привет.

Ответы [ 4 ]

1 голос
/ 05 июля 2010

Вам нужен Xerces 3.0, который вы можете загрузить и установить с http://xerces.apache.org/xerces-c/

Символьные ссылки на несуществующие библиотеки - это скользкий путь, но иногда это самое простое (или даже единственное) решение.

Если у вас есть для этого, попробуйте добавить каталог, содержащий символическую ссылку, в список каталогов для поиска, используя флаг -L gcc, например:

(при условии, что символическая ссылка находится в каталоге сборки):

g++ -L . -o taskintro taskintro.o `...`

UPDATE

В ответ на обновленный вопрос он должен найти libxerces-c-3.0.so, если он находится в /usr/local/lib.

.

Однако попробуйте это:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
./taskintro

и, если он не работает, выведите вывод ldd -v taskintro

Кроме того, вам больше не нужны -L и символические ссылки во время компиляции, теперь, когда вы установили Xerces 3.0. Пожалуйста, попробуйте перекомпилировать без них.

0 голосов
/ 03 октября 2014

Попробуйте установить библиотеку libxerces-c3.0 как , ваш код ссылается на библиотеки версии 3.0, но не на другие. Используйте указанную ниже команду для установки библиотеки.

 sudo apt-get install libxerces-c3.0
0 голосов
/ 06 июля 2010

Я скачал и установил xerces 3.0.Теперь ему удалось скомпилировать, но запуск выходного файла дает следующее:

./taskintro: error while loading shared libraries: libxerces-c-3.0.so: cannot open shared object file: No such file or directory

Я искал файл и нашел его здесь;

/usr/local/lib/libxerces-c-3.0.so

Я снова попытался создать символическую ссылкук этому файлу и обновил make-файл, как вы предложили (я полагаю, в этом нет необходимости, поскольку он скомпилирован), но ничего не изменилось.

ln -s /usr/local/lib/libxerces-c-3.0.so libxerces-c-3.0.so

${CC} -L . -o $@ $@.o ${OROLIBS}

ОБНОВЛЕНИЕ:

Команда экспорта помогла мне успешно скомпилироваться.теперь при запуске программы возникают другие проблемы с malloc.c, такие как;

taskintro: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted

Проверено также на других форумах, но не может понять, о чем идет речь.Похоже, проблема с самой программой, поэтому понятия не имею, как ее решить.

В любом случае Грасиас.

0 голосов
/ 05 июля 2010

Проблема в том, что /usr/local/lib/liborocos-rtt-gnulinux.so связан с libxerces-c-3.0.so.

Чтобы увидеть пути, по которым компоновщик идет, чтобы найти библиотеки, проверьте файл /etc/ld.so.conf.

...