1

http://community.activestate.com/node/7011

それは、別の年であり、MSVS 2012 を持っていることを除いて、リンクのあそこにあるかわいそうなチャップ シャン (性別に中立的にチャップを使用できますか?) のようなものです。

詳細

CMake は、バイナリの依存関係リストに C:...\Tcl\lib\tcl85.lib を配置しました (生成された .vcproj ファイルをチェックインしました - そこにあります)。それにもかかわらず、リンカ エラーは多数あり、次のような形式です。

nativeTCL_wrap.obj : エラー LNK2019:関数 _SWIG_Tcl_ [some-other-command- name] で参照されている未解決の外部シンボル __imp__Tcl_ [some-command -name] 。

したがって、MSVS のプロジェクトの依存関係リストに記載されているヘッダー ファイルを確認します。バージョンは#define8.5 です。これは、リンクしようとしているライブラリと一致します。tcl85.lib を依存関係ウォーカーで調べてみました。どうやらその種のファイルを探索することはできません。その上でdumpbin.exeを実行しました...そして、.libファイルには不足している機能がすべて含まれていますが、次の形式です。

__imp_Tcl_ [何らかのコマンド名]

すべての記号があります...しかし、それぞれにアンダースコアがありません!

次に、Cygwin で使用される ActiveState の Tcl ディストリビューションによって提供される libtcl85.dll.a ファイルを調べたところ、シンボルは次のようになりました。

__imp__Tcl_ [何らかのコマンド名]

したがって、余分なアンダースコアがあり Cygwin でバイナリ リンクが適切に行われます。

...

これは真剣に、私が手を空中に投げ上げて「どうしよう」と考えている瞬間の 1 つです。その単純化された文法的に台無しにされた栄光のすべてにおいて。同じ CMake を使用した同じ swig インターフェース ファイルは、Cygwin でモジュールを正常に生成します。しかし、Cygwin の開発は非常に遅いため、厄介な作業です (ビルドは、よりネイティブな Windows っぽいシステムのほぼ 5 ~ 8 倍の長さになります)。

次は何が起こる?

アンダースコアが 1 つ少ない依存関係を生成するように Swig を説得しようとしますか? もしそうなら、どのように?あきらめてバグレポートを提出しますか? もしそうなら、どこですか?これは ActiveState Tcl のバグですか? これは Swig のバグですか? これはまったくバグではなく、私はただめちゃくちゃですか?

アンダースコアがないために王国が失われたのですか?

4

1 に答える 1

1

そのため、質問を書いているときに、これがどのように間違っていた可能性があるかについて、さまざまな代替案をすべて考え始めました. 次に、CMake は既定で 32 ビット バージョンの MSVS を選択することを思い出しました。私は今、かなりひっそりと感じていますが、他の誰かがActiveStateフォーラムで同様の問題を抱えているようです.

結局のところ、MSVS の 64 ビット バージョンを選択すると、すべてがcmake -G "Visual Studio 2012 Win64"修正されました。リンクはうまくいきました。バイナリが Tclsh に正常にロードされました。

32 ビットと 64 ビットのバイナリを一緒にリンクしようとすると、ビルド ツールからより包括的なエラー メッセージが表示されることを期待していましたが...

于 2013-06-22T05:30:24.150 に答える