はじめに
gtkを使うのは、修論ぶりなので今から約20年以上前のことになります(当時、修士論文のためにgtkとtcl/tkを使い分けて、特定画像の特徴抽出プログラムを作成しました。。。。)。gtkを使っている間に先日見たNetflixの「ボクたちはみんな大人になれなかった」のラストシーンのように色々な思い出がフラッシュバックしました。笑
今回は、Mac、Jetson、Kriaで動作するためのGUI作成のために、monoDevelopなどいくつか検討した結果、20年以上の時を経て再び元の場所へ帰ってきました。
要件
テスト用GUIアプリケーションを作成したい。ただし、要件は以下のとおり。
- Mac、Jetson及びKriaで同一の開発環境が欲しい
- 直接ハードウェアのレジスタを触る可能性がある
- CUDA Cを使用したい
- OpenCV(C++又はPython)を使用したい
結果
上記の条件を満たそうとすると、「monoDevelopか」、「GTKを直接操作するか」、「Qtか」ということになり、結局GTKで開発することに決めました。以下、その理由です。
- Qt:良さそうなのはわかるが、お金の匂いがプンプンして、あとから面倒になりそう。
- monoDevelop:monoDevelopは良い。結構悩みました。
- C#ベース開発でき、GUIもセンスが良く、間違いなくGTKよりも開発スピードが上がると思う
- C#からC又はC++を呼ぶ場合、ライブラリ化が基本になってしまう
- C#、C++、Cが混在した場合のコンパイルシステムがよくわからない(勉強不足)
- monoDevelopがcやc++のコンパイルをサポートしたという記載があるが、資料が少ない
- オープンソースでcやc++を扱えるようだが、その構築で困りたくない(年齢からくるやる気の問題)
- GTK:よく知っている。扱いにくいこともよく知っている。
- C/C++でのGUI開発のため、他の要件と親和性が高い
- コンパイルシステム(make)を書くのが簡単
- 当時から資料が多く、困ることはあっても、止まることはない(経験談)
このような結論になってしまいましたが、もし、コメントがあればいただきたいです。本心としては、GTKを直接扱いたくなかった。。。
開発環境構築
- gtkラッパーであるgtkmmをインストールする(嵌まるのが嫌なのでgtkmm4.0をソースコードからコンパイルする方法は避けた。)。
sudo apt-get install libgtk-3-dev
sudo apt-get install libgtkmm-3.0-dev
※なお、Jetson(ubuntu)環境でgtkmm-3.0を使用してコンパイルを行うと以下のようなエラーが出ることがある
解決方法については、[参考](# 参考)のとおり、object.hに make_managed のテンプレートクラスを追加する。
"Unable to resolve the identifier make_managed"
- gitをインストールする
sudo apt-get git
なお、2021年8月13日からパスワード認証を廃止し、パーソナルアクセストークンで認証を行う必要があるので注意する。また、git clone
時には、githubでは、事前に設定した http
or ssh
のどちらか一方でしかアクセスできないので注意が必要です。
開発環境
スクリーンキャプチャ
参考
お手軽Linux(Ubuntu) GUIアプリ開発 入門
Programming with gtkmm 3
stackoverflow:Why do I get the compile error, "make_managed" is not a member of 'Gtk'?
GitHubでhttpsのパスワード認証が廃止された。Please use a personal access token instead.
Creating a personal access token