[[diary/Kojima]]

・Qt-4.8.1と-fvisibility

Qt-4.8.1が出ていたので,4.7.1から更新しようとチェック.ざっと見,
4.7.1で当てていたfake-bold用のパッチはそのままでは当たらなくなっているようなので,
とりあえずBLFSのQt-4.8.1にあったGCC-4.7用のパッチとglib-2.32用のパッチ,
インストール先をlib64にするパッチをあてて,BLFSの指定していたビルドオプションを流用してビルド.

ビルドそのものは問題なく終ったものの,このQt-4.8.1をインストールした環境では
うまくコンパイルが通らなくなる.

最初に気付いたのはlibdbusmenu-qt-0.9.2で,ビルドしようとすると

 $ make
 ...
 [ 51%] Built target dbusmenu-qt
 Linking CXX executable dbusmenuexportertest
 CMakeFiles/dbusmenuexportertest.dir/dbusmenuexportertest.cpp.o: 
       In function `DBusMenuExporterTest::testGetSomeProperties()':
 dbusmenuexportertest.cpp:(.text+0x1df7): undefined reference to 
    `DBusMenuExporter::DBusMenuExporter(QString const&, QMenu*, 
     QDBusConnection const&)'
 dbusmenuexportertest.cpp:(.text+0x275b): undefined reference to 
    `DBusMenuExporter::~DBusMenuExporter()'
 dbusmenuexportertest.cpp:(.text+0x27df): undefined reference to 
    `DBusMenuExporter::~DBusMenuExporter()'
 ...

と,DBusMenuExporterTest クラスの関数が参照できない,というエラーになる.

通常,この手のエラーは,Makefileでリンクするライブラリやバイナリファイルの設定が
間違っていることが多いので,さて,どういうコマンドでリンクされているのか,,と
Makefileを調べてみると,cmake で生成されたMakefileなのでよく分からない.
何とか見つけたVERBOSE=1というオプションを指定して実行してみると,

 /usr/bin/g++  -isystem /usr/include -m64  
    CMakeFiles/dbusmenuexportertest.dir/dbusmenuexportertest.cpp.o 
    CMakeFiles/dbusmenuexportertest.dir/testutils.cpp.o  
    -o dbusmenuexportertest -rdynamic -lQtGui -lQtCore -lQtDBus -lQtTest 
    ../src/libdbusmenu-qt.so.2.6.0 -lQtGui -lQtCore -lQtDBus 
    -Wl,-rpath,/nfs/Srcs/L/Libs/Dbusmenu-qt/build/src

こんなコマンドラインでリンクしていることが分かった.一方,参照できない
DBusMenuExporterTestクラスはどこで定義されているのか,と調べてみると,
このパッケージ自身が生成したライブラリである ../src/libdbusmenu-qt.so.2.6.0 だった
(リンクエラーが生じているのはtest/以下のテスト用プログラム)

Cの場合は,このコマンドラインを元に-lでライブラリを追加したり,-Lでライブラリのディレクトリを追加したり,
ライブラリをリンクする順番を変えてみたりしてやれば何とかなることが多いので,
あれこれ試してみたけど効果なし.

Google等で調べてみても特に該当する情報は無いし,
Qt-4.7.1の環境でビルドしようとすると問題なくこの部分も通ってしまう.
システム側のQtライブラリをリンクしないようにすると
DBusMenuExporterTestクラス以前にQtの提供するクラスが見つからない,とのエラーになる.

Qt-4.8.1側の問題であることは確かそうなんだけど,
さて,4.7.1と4.8.1で何が変わったんだろう..と首をひねっていたのであった(続く)

#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS