2012-04-20 9 views
1

サードパーティの.libを使用するWin32アプリケーションをビルドしようとしています。私は "LIBC"が見つからないというエラーが出ます(私はVisual C++ 2010 Expressを使用しています)、私は第三者のlibへの参照を追跡しました。 "/ NODEFAULTLIB"を追加すると、LIBCへの参照が解決されますが、(もちろん)欠けているシンボルがたくさんあります。 私はLIBCがシングルスレッドであり、あらゆる種類の頭痛を抱えていることは知っていますが、今はちょうどいいリンクを手に入れようとしています。特定の.libファイルの "defaultlib"ディレクティブを無視する

敬具、 ソレン

答えて

1

そこで、修正しました。私がちょうどに行く、私の目を開けなければならなかったようだ

: プロジェクト - >プロパティ - >リンカー - >入力

代わり

私は「特定のデフォルトライブラリを無視」に「libcの」を追加するために必要な、 「すべてのデフォルトライブラリを無視」を有効にするだけです。

事は機能します(ちょうどクイック実行でした)。もちろん、標準のCライブラリのマルチスレッド版が使用されているために隠されたエラーがあるかもしれませんが、それほど良いことです!

2

それはの#pragmaコメント(libに、 "LIBC.LIB")を注射したリンカーにだけヒントです。 /NODEFAULTLIB:libc.libリンカーオプションは、再び消滅します。リンカーエラーが発生した場合は、実際にを実行してにlibc.libを明示的にリンクする必要があります。

これは、他の点ではかなり良い結果に終わることはまずありません。そのライブラリは、これまでの世紀のものです。 VSの最新バージョンではlibcmt.libを使用していますが、CRTのシングルスレッドバージョンはなくなりました。したがって、このlibc.libの参照が、前世紀にコンパイルされた.libまたは.objから来た場合は、より大きな問題があります。コンパイラのヘッダーファイルがあまりにも多く変更されているため、それを動作させることはできません。

リンカーエラーを投稿しないと、より良い答えが得られません。

+0

はい私はすべてそれを得る、質問は:私はその古いlibのための現在のCライブラリを使用することはできますか?これは標準のCライブラリであるため、どのようにインタフェースが変更できましたか? –

+0

ハンス、お返事ありがとうございます。私は以前のコメントを通して、古いライブラリの不満が多かったかもしれないと思う。私は問題が潜在的に悪いことを認識していますが、私はリンクすることを試みるために私の理由があります.... –

+0

標準のCライブラリはソース互換性があり、バイナリ互換ではありません。あなたは常にソースから再コンパイルできるという強い前提で。あなたができなければ、それをあなたの鼻にこするリンカーになります。あなたが見ているリンカエラーを投稿することを拒否した場合も、この点を超えては何も役に立ちません。 –

関連する問題