2017-12-08 11 views
-1

Visual Studio(2013)で "mylib.lib"という静的なC++ライブラリを作成しました。それはマルチスレッド(/ MT)であり、ライブラリアン/ Generalの下にある "出力ファイル"を "$(OutDir)$(TargetName)$(TargetExt)"に指定していますので、 "mt"私が '/ MT'を使用したからといって、ファイル名の最後に強制的に入ります。Visual Studioで依存関係ライブラリ名を使用するように強制するにはどうしたらいいですか?

このプロジェクトは他のいくつかの依存関係にもリンクしているので、アプリケーションを使用して消費するためにすべてが1つの巨大な "mylib.lib"ファイルに入っています。これらの他のライブラリは、 "A.lib"、 "B.lib"、 "C.lib"です。また、ファイル名の末尾に "mt"がないように出力名を指定してビルドされています。

私は "/ MT"を使ってビルドするC++アプリケーションで "mylib.lib"を使いたいと思います。アプリケーションはそのライブラリとリンクし、そのライブラリ内で単一の関数を呼び出します。アプリケーションが "ファイル 'Amt.lib' LNK1104 'を開くことができないため、リンクできません。

このアプリケーションは "A.lib"に直接依存せず、依存関係はすでに "mylib.lib"に含まれています。 "mylibmt.lib"としてリンクしようとしていません。 1つのケースでは「mt」という接尾辞を適用しても、別のケースでは適用されないように見える恣意的な決定が混乱します。

ここではVisual Studioの心の中で何が起こっていますか?そして、特定のライブラリに "mt"を追加しないように伝える方法はありますか?

+0

"このプロジェクトは他のいくつかの依存関係にもリンクしているので、アプリケーションを使用して消費するためにすべてが1つの巨大な" mylib.lib "ファイルに入っています。 libファイルは他のlibファイルとリンクしません。 – tkausl

+0

@tkausl:[彼らは](https://stackoverflow.com/questions/47719975/how-can-i-force-visual-studio-to-use-dependency-library-names-i-want-it-to )、一種。 – MSalters

+0

mylib.libはビルド後かなり大量ですので、私は彼らがそこにいると確信しています...?いずれにせよ、私はまだ名前の最後に "mt"を入れないようにする必要があります。 – Bungles

答えて

0

これを達成する1つの方法は、使用するアプリケーションに「デフォルトライブラリなし」を設定し、リンカセクションにすべての「追加」依存関係を手動で追加することです。これには、依存関係ツリー全体をトレースする必要がありますが、機能します。

簡単な方法は、「リンカ|入力」の下の「特定のデフォルトライブラリを無視する」フィールドに目的のライブラリを追加することです。たとえば、 "Amt.lib"、 "Bmt.lib"、 "Cmt.lib"をそのフィールドに追加し、 "A.lib"、 "B.lib"、および "C.lib"を"Additional Dependencies"フィールド(Linker | Inputの下にもあります)。

関連する問題