manifestのリンクで失敗する
とりあえずファイルリリースページにパッチを置いておきました。検証してみます。
VS2005のソリューションをデフォルトのままVS2008用に変換してみたところ、 同じ症状(この時のパスは"C:\Documents and Settings\kawamoto\デスクトップ\ffftp-1.97b-src\FFFTP.sln")が発生しましたが、 ファイル群を半角英数のみのパス(例"C:\ffftp"内)に配置すると正常にビルドできました。
VS2005ではパスを変更しても依然としてエラーとなりました。
1>リンクしています... 1>CVTRES : fatal error CVT1100: 重複するリソースです。type:MANIFEST, name:1, language:0x0409 1>LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。もともとSourceCode.txtにはVS2010とあるのにslnとvcprojがVS2005用なんですね。
ところで、manifestの件は「インクリメンタルリンク」をFFFTP/FFFTP_English両方のDebugで「使用しない」にしただけで、パッチにはその他の複数の修正が含まれています。修正ごとにパッチファイルを分けた方が反映しやすいですか?VS2008のvcprojがコミットされていますが私は持ってないので、それ用の物は作ったとしてもこちらで動作確認できないのですが…
maya への返信
VS2005ではパスを変更しても依然としてエラーとなりました。 {{{ 1>リンクしています... 1>CVTRES : fatal error CVT1100: 重複するリソースです。type:MANIFEST, name:1, language:0x0409 1>LINK : fatal error LNK1123: COFF への変換中に障害が発生しました: ファイルが無効であるか、または壊れています。 }}} もともとSourceCode.txtにはVS2010とあるのにslnとvcprojがVS2005用なんですね。 ところで、manifestの件は「インクリメンタルリンク」をFFFTP/FFFTP_English両方のDebugで「使用しない」にしただけで、パッチにはその他の複数の修正が含まれています。修正ごとにパッチファイルを分けた方が反映しやすいですか?VS2008のvcprojがコミットされていますが私は持ってないので、それ用の物は作ったとしてもこちらで動作確認できないのですが…
VS2008ですが、プロジェクトではなくソリューションのビルドをDebugで行うと半角英数のパスでも症状が発生するようです。 ソリューションのビルドをReleaseで行う場合や、プロジェクト単体でビルドした場合は問題無いようですが、VS2005を持っていないためそちらの環境でどのようになるかは分かりません。 恐らくSota氏はデバッグ作業を日本語版のみで行い、リリース時だけ両方生成していたのでしょう。
修正を添付しました。
マニフェストの生成を無効にし、追加のマニフェスト(元々設定されていないが"0010-Change-the-way-to-link-manifest-file.patch"で追加された)を指定しないようにすると正常にビルドできました。 原因は、Visual Studioがマニフェストを操作した結果はリソースID#1としてリソースに追加されますが、既にFFFTP-eng.rcによりID#1にFFFTP.exe.manifestが読み込まれ、それらが競合したためのようです。 つまりリソースファイルでID#1にマニフェストを指定したらVisual Studio側でマニフェストを一切操作しないようにする必要があるということです。 日本語版やリリースビルドが通ったのは、偶然IDが競合してもエラーにならない条件を満たしていただけでしょう。
手持ちの Visual Studio 2005 では英語版のマニフェストのリンクで失敗するので、コンパイルが通るようにパッチを作ってみました。よければ使ってみて下さい。
http://ttssh2.sourceforge.jp/tmp/ffftp/