2

Red Hat Linux 上の HP UX サーバーで実行されているプログラムをコンパイルしようとしています。

xerces-c ライブラリを使用して xml ファイルを解析します。コンパイルは問題ありませんが、実行しようとすると、次のメッセージが表示されます

./a.out: 共有ライブラリの読み込み中にエラーが発生しました: libxerces-c.so.28: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません

何が起こっているのかを理解するために、非常に単純なプログラムを作成しました。

#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/TransService.hpp>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>



int main(int argc, char* argv[])
{
        return 0;
}

そして、次のようにコンパイルしました。

g++ test.cpp -L./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include

驚いたことに、ファイルは実際にはそこにあります。

lib]$ ls
libxerces-c.a   libxerces-c.so.28    libxerces-depdom.a   libxerces-depdom.so.28
libxerces-c.so  libxerces-c.so.28.0  libxerces-depdom.so  libxerces-depdom.so.28.0

何かご意見は ?何かが足りない気がしますが、何がわかりません。

前もって感謝します。

4

3 に答える 3

6

実行ldd a.outして、リンカーが正しい .so ファイルを解決できるかどうかを確認します

LD_LIBRARY_PATH(PATH変数と同じ方法で)現在のフォルダーを含めるようにエクスポートし、lddを再度確認します

于 2009-11-12T14:29:58.410 に答える
0

あなたが望むことをする良い方法は次のとおりです:

g++ test.cpp -Xlinker -R ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include

また

g++ test.cpp -Wl,-rpath ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include

Xlinker または WL オプションを使用すると、特定のリンク オプションを使用できます。LD_LIBRARY_PATH を変更する必要はありません。

于 2009-11-12T15:39:51.003 に答える
0

コード内で静的にコンパイルされず、通常の /lib および /usr/lib の場所にないさまざまなシンボルを見つける場所を、ランタイム C ライブラリに伝える必要があります。

これを行うには、共有ライブラリへのパスを LD_LIBRARY_PATH に追加します。この場合、これは、コンパイラへの -L 引数に指定したものになります。

于 2009-11-13T08:39:52.383 に答える