web-dev-qa-db-ja.com

Visual Studio 15 __imp ___ iob、__ imp ___ pctype、__ imp ___ mb_cur_max

VisualStudioでmingwでコンパイルされたライブラリを使用しようとしています。ただし、次のリンカーエラーが発生します。

エラーLNK2001:未解決の外部シンボル__imp ___ iob

エラーLNK2019:関数で参照されている未解決の外部シンボル__imp___pctype

エラーLNK2019:関数で参照されている未解決の外部シンボル__imp____mb_cur_max

エラーLNK2001:未解決の外部シンボル_fprintf

この投稿のようにlegacy_stdio_definitions.libに対してリンクすることで、_fprintfエラーを修正できました: 未解決の外部シンボル__imp__fprintfおよび__imp ____ iob_func、SDL2

しかし、他の3つの未解決の外観を修正する方法がわかりません。どうすればこれを修正できますか?ライブラリは、Visual Studio2013で完全に機能します。

編集:

さて、ここにアップデートがあります。 libmsvcrt.aをmingwlibフォルダーからVisualStudioに移動し、それをリンカー設定に追加しました。今では正しく動作しているようです。

13
stack_tom

ライブラリは、古いバージョンのCRTに対してコンパイルされました。取得する未解決のシンボルは、コンパイルされたライブラリに存在するCRTの内部シンボルです。 VS2015 CRT(ユニバーサルCRT)に対してライブラリを再コンパイルする必要があります。しかし、MinGWがこれをサポートしているかどうかはわかりません。

それができない場合は、VS2013コンパイラを引き続き使用する必要があります。 (プロジェクトオプションでツールセットをvs2013に設定することにより、VS2015 IDEを使用できます。ただし、2013コンパイラがサポートするC++機能に制限されます。)

6
Sebastian Redl

同じ問題(DLLのCRTではなく静的CRTでコンパイルされたライブラリ)が発生し、プロジェクトのプロパティで次の2つのパラメーターを変更することで問題を解決できました。

  • リンカー>入力>特定のデフォルトライブラリを無視する:libc.lib
  • C/C++>コード生成>ランタイムライブラリ:マルチスレッドデバッグ(/ MTd)

それだけでは不十分な場合は、次のページに詳細があります: https://social.msdn.Microsoft.com/Forums/en-US/841e5723-bce4-4340-b7b3-027dcdf90f00/

2
FlorianT