質問

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

これは、XMLファイルを解析するためのXerces-Cライブラリを使用しています。コンパイルはOKですが、私はそれを実行しようとすると、私は次のメッセージが表示されます。

  

./ 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

任意の考え?私は私が何かが欠けてる感じが、何を知らない。

事前に感謝します。

役に立ちましたか?

解決

ldd a.outを実行すると、リンカは、

.soファイル権利を解決できるかどうかを確認 現在のフォルダ(PATH変数と同様に)を含むと

再びLDDをチェックする

エクスポートLD_LIBRARY_PATH

他のヒント

あなたが欲しいものを行うには良い方法は、次のいずれかです。

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またはW1をオプションを使用すると、特定のリンクオプションを使用することができ、あなたはmodifiyする必要はありません。 LD_LIBRARY_PATH

あなたはどこのコードで静的にコンパイルされ、/ libにusualyと/ usr / libの場所にアレントアレント様々なシンボルを見つけるためにランタイムCライブラリを伝える必要があります。

あなたはLD_LIBRARY_PATHに共有ライブラリへのパスを追加することによってこれを行います。この場合、これはあなたがコンパイラに-L引数に入れてきた何になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top