2010-07-05 10 views
1

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

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 [email protected]* 

С уважением.

ответ

0

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

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

1

Вам нужно 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

Я загрузил и установил 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 

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

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

${CC} -L . -o [email protected] [email protected] ${OROLIBS} 

UPDATE:

команда экспорта помогла мне успешно компилируется. теперь запуск программы, похоже, имеет другие проблемы с 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 

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

Gracias в любом случае.

+0

Да, это похоже на проблему с кодом. –

0

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

sudo apt-get install libxerces-c3.0