2011-01-25 38 views
2

私はZwQueryInformationProcessを使用するためにntdll.libとリンクしており、マルチスレッドランタイムライブラリを使用しています。エラーLNK2005:_sprintfは既にntdll.lib(ntdll.dll)で定義されています

ntdllは、いくつかのcrt関数を定義しているようです。だから、私はそれにリンクし、また、ランタイムライブラリを使用すると、私はリンカエラーを取得します。

リンカにcrt関数を使用させ、ntdllシンボルを無視してエラーを取り除くことはできますか?あるいは、何らかの形でこのエラーを解決します。

私はZwQueryInformationProcessのドキュメンテーションが動的ロードを示唆していることを知っていますが、静的なlibで使用されています。私のメインプロジェクトもリンクしています。これは長い間うまくいきました。

ありがとうございました。

他のサイトでこれについて少し議論がありました。例えば、http://www.codeguru.com/forum/archive/index.php/t-414274.htmlですが、良い解決策を提供するようなものは見ていません。リンク順序を変更することについていくつか言及していますが、プロジェクト設定でランタイムライブラリがリンクする順序を変更する方法はわかりません。

+0

どこからntdll.libを入手しましたか? ntdll.dllはsprintfをエクスポートしますが、先頭のアンダースコアはありません。 _sprintfのリンカーエラーは発生しないはずです。 –

+0

私はC:\ WINDDK \ 7600.16385.0 \ lib \ wxp \ i386 \ ntdll.libにリンクしていますが、そのDDKのlibの後のバージョンがあることを認識していますが、私のプログラムはxpで実行する必要があります。私はチェックして、これは_sprintfを持っていますが、他のntdll.libはエクスポートしていません。 –

答えて

2

リンク順を変更すると、それが解決されるようです。自動的にリンクされるライブラリの順序を変更するには、「特定のライブラリを無視する」に追加して無視し、それらをリンクしたい順番で「追加の依存関係」に再追加する必要があります。エラーメッセージは次のとおりです:

1>libcmt.lib(wcstol.obj) : error LNK2005: _wcstoul already defined in ntdll.lib(ntdll.dll) 

私はlibcmt.libを無視して追加しました。追加の依存関係の先頭に配置しました。これは別のエラーを作りました。私は同じ手順を続けました。

Project properties screenshot

私も見冗長/追加::だから、プロジェクトのプロパティは、(ntdll.libは、追加の依存関係の終わりである)このように見終わったlibがリンカに - >コマンドライン - >追加オプションは、どのライブラリがリンクされているのか、どのような順序で表示されているのかを正確に確認できるように便利です。

+0

libcmt.libとnafxcw.libをIgnore Specific Libraryオプションから削除してみてください。それも私の作品です。だから私は、あなたはそれをオプションの追加の依存関係に置く必要があると思います。 – user720594

関連する問題