2

我正在尝试制作一个工具包的示例,但在输入 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

但没有任何改变。我想我需要确定安装目录的路径,但我在这个问题上没有太多经验,所以如果有人能帮我找出来,我会很高兴。

我的makefile是这样的;

*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

4 回答 4

1

您需要 Xerces 3.0,您可以从http://xerces.apache.org/xerces-c/下载并安装它

到不存在的库的符号链接是一个滑坡,但有时它是最简单(甚至是唯一)的解决方案。

如果必须-L这样做,请尝试使用 gcc 的标志将包含符号链接的目录添加到要搜索的目录列表中,如下所示:

(假设符号链接在构建目录中):

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

更新:

针对更新后的问题,它应该找到 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,编译时不再需要和符号链接。请尝试在没有这些的情况下重新编译。

于 2010-07-05T16:04:12.840 回答
0

问题是 /usr/local/lib/liborocos-rtt-gnulinux.so 与 libxerces-c-3.0.so 链接。

要查看链接器查找库的路径,请检查 /etc/ld.so.conf 文件。

于 2010-07-05T13:57:44.640 回答
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

我再次尝试创建指向该文件的符号链接,并按照您的建议更新了 makefile(我猜因为它已编译,所以不需要这样做),但没有任何改变。

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

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

更新:

export 命令帮助我编译成功。现在运行程序似乎与 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

也从其他论坛检查过,但无法理解这是关于什么的。看起来是程序本身的问题,因此不知道如何解决。

无论如何,格拉西亚斯。

于 2010-07-06T08:22:54.283 回答
0

尝试安装库libxerces-c3.0,因为您的代码引用的是 3.0 版库,而不是任何其他库。使用下面提到的命令安装库。

 sudo apt-get install libxerces-c3.0
于 2014-10-02T20:41:27.253 回答