64bit CentOS 6のdevtool-1.1でc++ 32bit compileできない
devtools-1.1をインストールし、g++のオプションに-m32を追加し、
scl enable devtoolset-1.1 bash
後にmakeするとこんな感じのエラーがでてビルドに失敗。
/opt/centos/devtoolset-1.1/root/usr/libexec/gcc/x86_64-redhat-linux/4.7.2/ld: skipping incompatible /opt/centos/devtoolset-1.1/root/usr/lib/gcc/x86_64-redhat-linux/4.7.2/libstdc++_nonshared.a when searching for -lstdc++_nonshared
/opt/centos/devtoolset-1.1/root/usr/libexec/gcc/x86_64-redhat-linux/4.7.2/ld: cannot find -lstdc++_nonshared
実際、
$ ls -l /opt/centos/devtoolset-1.1/root/usr/lib/gcc/x86_64-redhat-linux/4.7.2/32
...
- rw-r--r--. 1 root root 78 Jan 26 2013 libgomp.so
lrwxrwxrwx. 1 root root 41 Sep 1 13:52 libitm.a -> ../../../i686-redhat-linux/4.7.2/libitm.a
- rw-r--r--. 1 root root 77 Jan 26 2013 libitm.so
lrwxrwxrwx. 1 root root 46 Sep 1 13:52 libquadmath.a -> ../../../i686-redhat-linux/4.7.2/libquadmath.a
- rw-r--r--. 1 root root 70 Jan 26 2013 libquadmath.so
lrwxrwxrwx. 1 root root 44 Sep 1 13:52 libstdc++.a -> ../../../i686-redhat-linux/4.7.2/libstdc++.a
- rw-r--r--. 1 root root 206 Jan 26 2013 libstdc++.so
lrwxrwxrwx. 1 root root 54 Sep 1 13:52 libstdc++_nonshared.a -> ../../../i686-redhat-linux/4.7.2/libstdc++_nonshared.a
となっているけれど、リンク先のi686-redhat-linuxのディレクトリが存在しない。色々試行錯誤した結果、32bit用を明示的にインストールする必要があることが判明。
でもこれでできるのはなぜか /opt/rh/devtoolset-1.1/root/usr/lib/gcc/i686-redhat-linux/4.7.2/ 。
ということで、
$ sudo ln -s /opt/rh/devtoolset-1.1/root/usr/lib/gcc/i686-redhat-linux /opt/rh/devtoolset-1.1/root/usr/lib/gcc/.
手動でシンボリックリンク貼って解決。ちなみにdebtools-2でも同様。
devtoolset-2がインストールできない
CentOS 6にdevtoolset-2を
http://linux.web.cern.ch/linux/devtoolset/
の通りにインストールしてもyum install devtoolset-2が以下のように失敗する:
GPG key retrieval failed: [Errno 14] Could not open/read file:///etc/pki/rpm-gpg/RPM-GPG-KEY-cern
公開鍵を手動で取得して解決:
sudo wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-cern http://linuxsoft.cern.ch/cern/slc6X/x86_64/RPM-GPG-KEY-cern
XcodeでプロセスにSIGINTを送る
プログラムを実行中にCtrl+Cで処理を止めたい、ということがよくある。XcodeではデフォルトではこのCtrl+Cで送られるSIGINTはデバッグ中のプロセスに送られずにデバッグが終了してしまう。
この動作を変えるにはデバッガlldbのシグナルに対する設定を変える必要がある。
実行中のプロセスをポーズし、デバッガのコンソールで
(lldb) process handle -s false -p true SIGINT
NAME PASS STOP NOTIFY
========== ===== ===== ======
SIGINT true false true
とする。でもどうもCtrl+CではプロセスにSIGINTが送られない。
(lldb) process signal SIGINT
でlldbからSIGINTを送るしかないみたいだ。
実際に送られるのはプロセスの実行を再開(Cmd+Ctrl+Y)し、再度ポーズ(Cmd+Ctrl+Yね)したときのようだ。
ここらへんの詳細はちょっと探したけれどどうも見つからない...
Xcodeが開かない
Xcodeが急に開かなくなった。ウィンドウが出てきたまま、ビーチボールが出て先に進まない。
Xcodeがハングアップして何もできないときの対処法 - Qiita
これとか参考にしたり、OnyXを動員してあれこれキャッシュを消したりしたけれど、結局~/Library以下のファイルでXcodeに関係ありそうなファイルを検索して以下を発見:
%~/Library/Autosave Information$ ls
com.apple.dt.Xcode.plist
Unsaved Xcode Document 2.xcworkspace
Unsaved Xcode Document.xcworkspace
こいつらを消して、ようやく開くようになった。
Xcode4で__MyCompanyName__をかえるには
デフォルトではアドレス帳にあるユーザーの情報が使われるようですが、Xcode上でもかんたんに変えられる:
Define __MyCompanyName__ in Xcode per project? - Stack Overflow
ユーザー名が漢字になってしまうのはどうやって変更するんだろう...
Rでエラー時にデバッグモードにするには
Rのデバッグでは頻繁にbrowser()を使うけれどコードを書き換えなければいけなくて面倒です。
エラーが起きた時点でbrowser()に入りたいときは以下のオプションを実行前にセットしておくと便利:
options(error=recover)
これでエラーが起きた時に変数の状態を見ることができる。