ジャンル不定の日記です。

C++とQtでHello world!

ここ数日古いPCで動きそうなブラウザ探してたが、まあ見つからん。
コロナ怖くて家にこもってるし、自分で作っちゃうか!まあ実用的なの作れるとは思えんがw

というわけなんだが、C++とかほとんど触ったこと無いしHello world!してみた。
メモリ節約を考えると小分けにして動的ロードする感じになると思うんだが、数が多くなるとC++がいいよね?
ってわけでC++にした。
あと、KDE使ってるのにFirefoxとかのためにGTKアプリ使わないといけないのが嫌なんで、Qt対応も考えて作ろうと思うんでQtも触ってみた。

C++でHello world!

hello.cpp
#include <iostream>

using namespace std;

int main(){
  cout << "Hello world." << endl;
  return 0;
}
<<記号があってキモいw

$ g++ -o hello hello.cpp
コンパイラはgcc入ってればC++もコンパイルできるようだが、コマンドはgccじゃなくてg++になるみたい。
-oオプションをつけない場合は.oファイルが作成されるらしい。つけると実行ファイルhelloが作成される。

まああまり理解できないんで必要なら調べる。

QtでHello world!

main.cpp
#include <QApplication>
#include <QPushButton>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);

    QPushButton hello("Hello world!");
    hello.resize(100, 30);

    hello.show();
    return app.exec();
}

$ qmake -project
.proファイルが作成される。
拡張子の左側はプロジェクト名だが、カレントディレクトリと同名になる。つまりディレクトリ名がプロジェクト名。
.cppファイルはプロジェクトのルートディレクトリに置いたが、srcとか下の階層に分けることもできるみたい。

QT += widgets
を.proファイルに追加。
この記述がされてないHello world!のサイトが多いようなんだが、QT5だと書かないとmakeでエラーになる。

$ qmake
オプション無しでqmakeすると.proを元にMakefileが作成される。

$ make
実行ファイルが作成される。

Void Linux 試した

昨日の Alpine Linux はfcitxとかmozcがないのが残念だったが、他に良さげなディストリビュージョン無いか探してたが、Void Linux を発見した。
Alpine Linux  と同じmuslのディストリを探しててみっけたんだが、Void Linux はmuslとglibcの2通り用意されてるディスとリビュージョン。
だが、i686はなぜかglibcしか無い。
ローリングリリースなんでクライアント用途には良さげで、知らなかったけどわりと人気のディストリビュージョンみたい。

glibcならArchでいいんでは?とも思ったが、Archは公式では32bitサポートが終わってるのに対し、Void Linux はglibcだけとはいえ公式だし、ありかな。
そもそも古いネットブックに入れる際に問題になるのはRAMだけでストレージは大量にあるしglibcでいいのかも。
というわけでVirtualboxで試してみた。


isoはXfceのライブCDになってる。xfce以外の環境もある。
起動するとXfceのデスクトップになるが、インストールボタンとかはなくターミナルから、
$ su
# void-installer
でインストーラーだが、rootパスワードは"voidlinux"
あと、インストール中に放置すると画面ロックが入ってロック解除に通常ユーザー(Xfceを実行してるユーザ)のパスワードも同じく"voidlinux"。
インストーラーはCUIだがdialogの選択式UIがあるんで親切。

インストールでちょっとはまったのが、パーティション構成のところで最初に「Select label type」でgptとかdosとか選択するところで、ext4ならgptでgrub入ると思ったんでgptにしたらインストールの最終段階でgrubが入んなくてエラーになった。
で、dosでやり直そうとしたんだが、一度GPTラベルが設定されると消さないと「Select label type」が出なかった。
インストーラーを中断して、
# dd if=/dev/zero of=/dev/sda bs=512 count=1
でGPTラベルを消したら元通りになった。
パーティションはディスクを8GBにしたんで/が7GBのsda1で残りスワップにした。

インストールはパッケージ選択とかもなくそれで終わりなんだが、リブートしたら起動しなかった。
32bitだとVMのプロセッサ設定でPAEを有効にしないと起動しないみたい。
PAE有効にすると起動するんだが、初回起動でinitramfsのロードのところで止まった。
ググったりリカバリモードで起動したりしたんだが、結局何も変えてないのに2回目以降は普通に起動した感じで謎。

起動はしたわけなんだが、GUIに移行するところで真っ暗に・・・
ここでかなり時間費やしたんだが、最終的にVirtualboxのポインティングデバイスを「PS/2 マウス」に設定して、
標準でDMがLXDMになってるんだが、リカバリモードで起動後にLXDM使わずにstartxfce4したら起動した。


通常モードではなくリカバリモードからの起動だが、同じことだと思うが、
試行錯誤してる際に同じ様にリカバリモードからstartxfce4しても起動しなかったんだが、Virtualboxのポインティングデバイスを変更したあとは起動した。
LXDMだとPS/2 マウスでもダメ。
まあ、そこら辺の問題と思う。

インストール後の環境は日本語になってるが、フォントとかIMは追加で入れる必要がある感じ。
fcitxとかmozcはあった。