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

しかし、何も変わりませんでした。インストールされたディレクトリのパスを特定する必要があると思いますが、この問題についてはあまり経験がないので、誰かが私を見つけるのを手伝ってくれるととてもうれしいです.

私のメイクファイルは次のようなものです。

*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/からダウンロードしてインストールできます。

存在しないライブラリへのシンボリック リンクは滑りやすい坂道ですが、場合によってはそれが最も簡単な (または唯一の) 解決策です。

これを行う必要がある場合は、シンボリック リンクを含むディレクトリを、次のように gcc の-Lフラグを使用して検索するディレクトリのリストに追加してみてください。

(シンボリック リンクがビルド ディレクトリにあると仮定します):

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

アップデート:

更新された質問への回答として、/usr/local/lib にある場合、libxerces-c-3.0.so を見つける必要があります。

ただし、これを試してください:

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

このファイルへのシンボリック リンクの作成を再試行し、提案されたようにメイクファイルを更新しました (コンパイルされたのでその必要はないと思います) が、何も変わりませんでした。

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 に答える