クライアントと静的ライブラリを共有しています。vs2008 sp 1 を使用しています。
共有dllおよび/MDオプションリリースバージョンを使用してmfcで構築したサードパーティのライブラリを使用しています
次に、共有dllオプションと/MDリリースバージョンを備えたMFCを備えたこのサードパーティライブラリを含む独自の静的ライブラリを構築しました。
テストDLLを作成して、動作することを確認しました。問題はありません。私はMFCをまったく使用していません。クライアントだけが、共有dllおよび/ MDでMFCを使用するように言われた理由です。
今、彼らは得ていると不平を言っています
xyz は msvcrt.lib(MSVCR90.dll) エラーで既に定義されています。これらは LNK2005 エラーのように見えます。
彼らは次のように述べています。
「具体的には、「マイ ライブラリ」がより大きな製造ツール チェーン ビルドに共通する多くのライブラリと静的にリンクしているという事実が原因で、リンクが失敗しています。これらの共通ライブラリ関数は「マイ ライブラリ」によってエクスポートされており、リンクの競合が発生しています。
さらに、彼らは次のように述べています。
「この問題を解決するために、「マイ ライブラリ」は単一の API (静的ライブラリから) 自体に関連付けられた関数のみを公開して、リンクの競合が発生しないことを保証します。エクスポートされた関数は、「マイ ライブラリ」がリンカー オプションとモジュール定義 (.def ファイル) ステートメントの組み合わせを使用してビルドされた"
何がこの問題を引き起こす可能性があるのか わかりません。これは私の側では問題ではありませんが、そこにあります。間違ったオプションまたは間違った CRT バージョンを使用して問題が発生している可能性がありますか?
また、静的ライブラリは標準の c 関数などに依存しているため、msvcrt.lib(MSVCR90.dll) とリンクしないという彼らの要求に応じることができるかどうかもわかりません。
現時点ではかなり迷っています。いくつかのリンクを調査しました C ランタイム (CRT) ライブラリの配布方法
と
http://www.nuonsoft.com/blog/2008/10/29/binding-to-the-most-recent-visual-studio-libraries/
しかし、リンクに記載されている内容が CRT の問題である場合、vs2008 で静的ライブラリを使用している CRT を特定する方法がわかりません。/verbose を使用して表示しましたが、機能しません。そして、ダンプビンまたは依存関係ウォーカーが静的ライブラリに対してそれをカットしないことを私は知っています。
数日間これに苦労し、狂ったように調査しました。msvcrt.lib(MSVCR90.dll) で問題が発生する理由についての回答はありません。