2007/07/17

KDEプログラミング その5

KDEプログラミング その4」の続きです。

あいかわらずよくわからずにやっています。
どんな方法が正しいのか分かりません。


それではチュートリアルを再開します。
今回は「P3」を行いました。

とりあえずチュートリアルにあるmain.cpp, p3.h, p3.cppを作成します。
$ ls
main.cpp p3.cpp p3.h



KDEプログラミング その2」と同様の手順でmakeを行ってみます。
$ qmake -project
$ echo INCLUDEPATH += /usr/include/kde >> p3.pro
$ echo LIBS += -lkdeui -L/usr/lib/kde3 >> p3.pro
$ qmake
$ make
g++ -c -pipe -Wall -W -I/usr/include/freetype2 -O2
-m32 -march=i386 -mcpu=i686 -DQT_NO_DEBUG
-I/usr/lib/qt3/mkspecs/default -I. -I. -I/usr/include/kde
-I/usr/lib/qt3/include -o main.o main.cpp

 〜略〜

g++ -o p3 main.o p3.o moc_p3.o -L/usr/lib/qt3/lib
-L/usr/X11R6/lib -lkdeui -L/usr/lib/kde3 -lqt-mt
-lXext -lX11 -lm
p3.o(.text+0xad4): In function `MainWindow::fileOpen()':
: undefined reference to
`KFileDialog::getOpenURL(QString const&,
QString const&, QWidget*, QString const&)'
p3.o(.text+0xd64): In function `MainWindow::fileSave()':
: undefined reference to
`KFileDialog::getSaveURL(QString const&,
QString const&, QWidget*, QString const&)'
collect2: ld はステータス 1 で終了しました
make: *** [p3] エラー 1


エラーになってしまいました・・・。
今まで一度もすんなりといったことがありません。


エラーの内容を見てみると、リンク中にgetOpenURL()とgetSaveURL()が見つからないと言っている気がします。

チュートリアル
では次のような記述があります。
Note that you're encouraged to allow the user to open any URL not just local files. For this, we have used a getOpenURL dialog, which lets the user select any url. Check below for an example on how to use the KIO library.


またKFileDialog::getOpenURLの関数リファレンスはこちらにあります。

KIO Libraryに含まれるのは確かのようなので、多分リンク時に"-lkio"とか入れるのでは無いかと想像しました。
探してみると/usr/lib/libkio.soというのがありましたので、当たりかなと。


そこで最初からmakeの手順をやり直してみます。
$ make clean
rm -f moc_p3.o
rm -f moc_p3.cpp
rm -f main.o p3.o
rm -f *~ core *.core
$ ls
Makefile main.cpp p3.cpp p3.h p3.pro
$ rm Makefile p3.pro
$ ls
main.cpp p3.cpp p3.h


プロジェクトファイルから作りなおします。
$ qmake -project
$ echo INCLUDEPATH += /usr/include/kde >> p3.pro


リンクするライブラリに"-lkio"を追加します。
"-lkui"ももちろん入れておきます。
$ echo LIBS += -lkdeui -lkio -L/usr/lib/kde3 >> p3.pro


一応p3.proの確認です。
$ tail -n3 p3.pro
SOURCES += main.cpp p3.cpp
INCLUDEPATH += /usr/include/kde
LIBS += -lkdeui -lkio -L/usr/lib/kde3


一気にmakeまで行います。
$ qmake
$ make
g++ -c -pipe -Wall -W -I/usr/include/freetype2 -O2
-m32 -march=i386 -mcpu=i686 -DQT_NO_DEBUG
-I/usr/lib/qt3/mkspecs/default -I. -I.
-I/usr/include/kde -I/usr/lib/qt3/include
-o main.o main.cpp
main.cpp: function 内の `int main(int, char**)':
main.cpp:6: 警告: `__comp_ctor' is deprecated
(declared at /usr/include/kde/kapplication.h:205)
g++ -c -pipe -Wall -W -I/usr/include/freetype2 -O2
-m32 -march=i386 -mcpu=i686 -DQT_NO_DEBUG
-I/usr/lib/qt3/mkspecs/default -I. -I.
-I/usr/include/kde -I/usr/lib/qt3/include
-o p3.o p3.cpp
/usr/lib/qt3/bin/moc p3.h -o moc_p3.cpp
g++ -c -pipe -Wall -W -I/usr/include/freetype2 -O2
-m32 -march=i386 -mcpu=i686 -DQT_NO_DEBUG
-I/usr/lib/qt3/mkspecs/default -I. -I.
-I/usr/include/kde -I/usr/lib/qt3/include
-o moc_p3.o moc_p3.cpp
g++ -o p3 main.o p3.o moc_p3.o -L/usr/lib/qt3/lib
-L/usr/X11R6/lib -lkdeui -lkio -L/usr/lib/kde3
-lqt-mt -lXext -lX11 -lm
$ ls
Makefile main.cpp main.o moc_p3.cpp moc_p3.o p3*
p3.cpp p3.h p3.o p3.pro


make成功し、実行ファイルp3が作成されました。
早速実行してみます。
$ ./p3

動きました。


ソースの中身をまだ詳細を理解していないため、次はp3のソースをもっと調べることにします。
KIO Libraryを含めて。

英語だけど。

0 件のコメント: