2021年12月30日木曜日

Apple silicon (M1 Mac)でGP-IB通信できるのか(情報収集中)

NI488,やっと64bit対応したと思ったらこんどはApple silicon。

あきらかに重いコンダラを引くことになりそうな話ですが,新品でintel macが手に入らなくなる前にどうにかしておきたい問題。


NI488はまだarm64には対応していない様子。

ウェブサイトには対応OSとしてmacOS 11(x86_64)と書かれています。

この場合理屈の上ではRosetta 2の上で動くはず。

あとは,コンパイル時にキチンとarchitectureとしてarm64ではなくx86_64が指定できるのかどうか。


今はHomebrewで開発環境整えているので,まずはHomebrewでインストールするパッケージがx86_64にできるのか。

調べてみると,そもそもx86_64では/usr/local以下にインストールされていたものが,arm64では/opt以下になるなど,その時点で大変な予感しかしない。

Homebrew自身は,まずはterminalをRosettaで起動するよう設定。

ここのチェックボックスをオンにするかオフにするかで,Rosettaかどうかを切り替えられる模様。
Rosetta版とarm64版を切り替えて使うことも可能らしい。

とりあえず今日はここまで。




gthreadの使い方が変わったらしい(C言語)

 最近,卒研生に測定用プログラムのメンテナンスや改良を任せようと思っているのですが,gtkやgthreadの情報があまり日本語で公開されていないので,牛の歩みで進めています。


まず一番困ったのが,最近になって以下のような二つのwarningが出てくるようになったことです。


main.c:503:3: warning: 'g_thread_init' is deprecated [-Wdeprecated-declarations]


main.c:580:12: warning: 'g_thread_create' is deprecated: Use 'g_thread_new'


GLibの仕様変更のようです。

一つ目に関しては,どうやらg_thread_initとはもう書かなくてよくなったようで,単純に削除でOKでした。

二つ目に関しては,本文中では


  thread = g_thread_create ( thread_func, (gpointer)label3, FALSE, &error );


と書いているのですが,これをそのままg_thread_newと書き換えただけではダメみたいです。

オンラインドキュメントを見てみると,

g_thread_new ()

GThread *           g_thread_new                        (const gchar *name,
                                                         GThreadFunc func,
                                                         gpointer data);


と書いてあり,引数が3つになって,しかも第一引数が謎のスレッド名。

とりあえず謎のスレッド名のところは適当に名前をつけて,第二引数に関数名,第三引数に関数に渡すパラメータとして書き直したところ無事にwarningが消えました。