4

Ubuntu11.04x64で32ビットアプリケーションをビルドしようとしています。libboostのリンカーエラーが原因で、ビルドに問題が発生しています。buildステートメントにはその-lboost_system中に含まれていますが、ビルドしようとすると、次のようなものがたくさん表示されます。

CommunicationModule.cpp:(。text + 0x68c1):未定義の参照boost::system::generic_category()

CommunicationModule.cpp:(。text + 0x68d7):未定義の参照boost::system::system_category()

グーグルで見つけたものはすべて、boost_systemライブラリにリンクする必要があると言っています。私が見つけた場所の1つは、直接リンクしてみると言っていますが、リンクするとlocate boost_system結果は空になります。やってみると、sudo apt-get install libboost-system-devすでにインストールされていることがわかります。私はここでちょっと途方に暮れています。ライブラリはインストールされていますが、検索で見つかりませんか?

boost :: systemに適切にリンクするために私が何をする必要があるか誰かに教えてもらえますか?私はLinuxとコンパイラの複雑さにかなり慣れていないので、ここで助けていただければ幸いです。

アップデート:

これがの出力ですdpkg -L libboost-system1.42-dev

/. 
/usr 
/usr/share 
/usr/share/doc
/usr/share/doc/libboost-system1.42-dev
/usr/share/doc/libboost-system1.42-dev/copyright
/usr/share/doc/libboost-system1.42-dev/NEWS.Debian.gz
/usr/share/doc/libboost-system1.42-dev/README.Debian.gz 
/usr/lib
/usr/lib/libboost_system.a
/usr/lib/libboost_system-mt.so
/usr/lib/libboost_system-mt.a 
/usr/lib/libboost_system.so

これらの1つに直接リンクするために使用できるフラグはありますか?私は使ってみ-L /usr/lib/libboost_system.soまし-L /usr/lib/libboost_system-mt.soたが、どちらも問題を解決しませんでした。ビルドステートメントに/usr/lib/libboost_system.aとを追加するだけでも同じです。/usr/lib/libboost_system-mt.a

コンパイル行は次のとおりです。

g++ -m32 -Wl,-O1 -o UTNaoTool [.o files] -L/usr/lib32 -lqglviewer-qt4 -lqwt-qt4 -lboost_system -lboost_thread -lQtXml -lQtOpenGL -lQtGui -lQtNetwork -lQtCore -lGLU -lpthread

アップデート2:

Boost 1.49をダウンロードし、32ビット用にすべてをビルドしましたが、それが役に立ったようです。多くのエラーはなくなりましたが、今でも次のエラーが発生しています。

CommunicationModule.cpp:(。text+0x68c1):boost :: system :: get_generic_category()への未定義の参照

機能が異なることに注意してください。したがって、私のエラーはすべて、get_system_category()現在への未定義の参照に関するものget_generic_category()です。ビルドコマンドにを追加しようとしました-lboost_filesystemが、これは修正されませんでした。ビルド時にビルドした32ビットライブラリを参照していることを確認しましたlibboost_system

4

2 に答える 2

1

私自身のインストールを見ると、libboost-system-devはライブラリをインストールしていないようです。何がインストールされているかをdpkg教えてくれるので、次のlibboost-system-devようになります。

$ dpkg -L  libboost-system-dev
/.
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libboost-system-dev
/usr/share/doc/libboost-system-dev/copyright
/usr/share/doc/libboost-system-dev/changelog.gz

ざっと見て、インストールする必要があると思いますlibboost-system1.48.1(または他のバージョン)。

sudo apt-get install libboost-system1.XX.Y

コマンドを使用してライブラリを検索することもできますfind。たとえば、以下/usrで始まるすべてのファイルを検索しlibboost_systemます。

find /usr -name "libboost_system*"

編集:64ビットOSから32ビットOSにクロスコンパイルしているため、32ビットバージョンのBoostライブラリが必要です。すべての依存関係をクロスコンパイルするのではなく、これを行うために小さな32ビット仮想マシンをセットアップしたくなるでしょう。

于 2012-05-09T12:12:40.603 に答える
0

私はboost_serializationで同じ問題を抱えていましたが、これは2、3回グーグルした後に見つけたものです。

まず、このライブラリを個別にコンパイルする必要があります。したがって、boostライブラリをダウンロードした後、それを抽出してsudo ./bootstrap.sh'を実行し、次に sudo./b2-with-systemを実行します。

このステップの後、 locateboost_systemを実行すると結果が表示されます。

次に、手動でリンクしました。両方とも機能するはずです。

g ++ boostexample.cpp -o run /PATH/libboost_serialization.a

g ++ boostexample.cpp -o run -L / PATH / -lboost_serialization

これは少し回避策であり、ライブラリを適切にリンクする方法をまだ探しています

これがお役に立てば幸いです:)

于 2012-05-09T12:11:33.037 に答える