Visual C++ 2015 Update 2 以降のリンカにはスタティックライブラリの中身を(参照されていなくても)全て取り込む /WHOLEARCHIVE オプションがありますが、これをインクリメンタルリンクを行う /INCREMENTAL オプション(こっちはずっと前からある)と併用するとスタティックライブラリの中身を更新してもリンクされない(スタティックライブラリの中の新しいオブジェクトと入れ替わらない)という現象が発生するようです。

他にも気づいた人はいるようで、フォーラムに投稿した後にバグレポートは出ているようです。

デバッグビルドだとインクリメンタルリンクがオンになるんですが、オフにすっかなぁ…(オフならちゃんと期待したような動作になる)

2017年02月にいただいた寄付は以下の1件です。ありがとうございました。

日付 お名前 金額
02/12 Hermann Spiess $5.00

Mac の方の環境を 10.10 Yosemite + Xcode 7.2 から 10.12 Sierra + Xcode 8.2 に更新したんですが、SDK に macOS 10.12 SDK を指定したら QuickTime 関連のヘッダファイルがありません。

Read the rest of this entry

GCC のインラインアセンブラでは出力 (output operands) リスト、入力 (input operands) リストの他に、アセンブラブロックの中でどのレジスタが破壊されるか(つまり、どのレジスタをコンパイラ側で復元しなければいけないか)を指定する 破壊 (clobber) リストを指定することができます。

Read the rest of this entry

主語を大きく取りすぎている可能性がある(実際に確認したのは「Mac の i386/x86_64 をターゲットとする、Xcode に含まれている Clang のインラインアセンブラ」だけ)のですが、記事タイトル通りのことになります。

Read the rest of this entry

その2の続き

Intel 記法と Input Operand (の一部の制約)は併用できないわけですが、手持ちのソースを AT&T 記法に変換するのもチョー大変なので別の方法を。

Read the rest of this entry

同一 asm 句内に定義がある場合はいいのですが、別の asm 句に定義があると処理できません。

Read the rest of this entry

その1の続き

一つ重要なテストを忘れていました。 Extended Asm の Input Operand です。

Read the rest of this entry

Unix の ld コマンド(GNU の ld コマンド固有かもしれないけど)には --whole-archive というオプションがあって、スタティックライブラリの中のオブジェクトファイルを、どこからも参照されていなくても出力ファイルに含めることができます。これは、スタティックライブラリをシェアードライブラリに変換する手法としても知られています。

で、Visual C++ の場合に同様のことをやる方法ですが、バージョンによってちょっと違います。

Read the rest of this entry

性能向上
  • UQY2, UQRG, UQRA: エンコードを高速化した。

Read the rest of this entry