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用を明示的にインストールする必要があることが判明。

$ sudo yum install devtoolset-1.1.*i686

でもこれでできるのはなぜか /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

ユーザー名が漢字になってしまうのはどうやって変更するんだろう...

Redmineのwikiで画像サイズを変える

Redminewiki等で画像を貼付けると実サイズでinline表示されてしまう。

これをwiki記法で解決する方法はどうもなさそうなのですが、以下のようにcssを書き換える事で自動でリサイズしてはみ出さないようにはできるようだ:

public/stylesheets/application.css

div.wiki img { vertical-align: middle;}

div.wiki img { vertical-align: middle; max-width: 98%}

に書き換える。

Wiki image width control - Redmine

Rでエラー時にデバッグモードにするには

Rのデバッグでは頻繁にbrowser()を使うけれどコードを書き換えなければいけなくて面倒です。

エラーが起きた時点でbrowser()に入りたいときは以下のオプションを実行前にセットしておくと便利:

options(error=recover)

これでエラーが起きた時に変数の状態を見ることができる。