3.11ではflexlinkが必須になっていました

ocamlmklibもWindows版に付いてきてますし、使用できるライブラリが増えるといいですね。
……などとわくわくしてたら、ちょっと大き目の.oで早速引っかかってしまいました。
flexlinkのソースのcoff.ml

    if (int32 buf 36 &&& 0x01000000l <> 0l)
    then (Printf.printf "More relocs!\n"; assert false);

COFFのセクションヘッダーのオフセット+39って、メモリのページ数ですよね……。4K単位のやつ。
flexlinkはページ数が奇数のセクションを扱えない!?でもこのチェックを消したらきちんと動く.exeを作ることができましたし。
"More relocs!"を信じようと思っても、COFF1はリロケーションが必要なエントリ数を記録するところは2バイトですので単なるオフセット値間違いとも思えませんし……。なんでしょう?
binutilsのソースと見比べると、どうもリロケーションが必要なエントリ数が65535を超えるとここに1が入るようです。
ページ数はどこへ?と思ったらbinutilsのバージョン間でも結構違いがある様子。まあいいか。とりあえず最近のbinutilsはここはページ数ではなくフラグと。
結論としては、flexlinkは65535以上のエントリをサポートしていません。

この制限を切り抜けるため、ocamloptの吐く.oのリロケーションエントリ数をゴルフ……この話はまた今度。とりあえず今回はflexlinkの制限の話ということで終わらせていただきます。