2

プロジェクトで libcurl を使用する予定です。ライブラリ ソースをダウンロードし、小さな POC アプリケーションにビルドして統合しました。生成された libcurl.dll および libcurl_imp.lib ファイルで問題なくアプリケーションをビルドして実行できます。プロジェクトに同じライブラリを統合すると、リンカー エラーが発生します。

6>foo.obj: エラー LNK2001: 未解決の外部シンボル __imp__curl_easy_setopt

6>foo.obj: エラー LNK2001: 未解決の外部シンボル __imp__curl_easy_perform

6>foo.obj: エラー LNK2001: 未解決の外部シンボル __imp__curl_easy_cleanup

6>foo.obj: エラー LNK2001: 未解決の外部シンボル __imp__curl_global_init

6>foo.obj: エラー LNK2001: 未解決の外部シンボル __imp__curl_easy_init

CURL_STATICLIB定義の追加、ライブラリの追加、/MT への変更、ライブラリをリリース ディレクトリにコピーするなど、あらゆる方法の回避策を調査して試しましたが、何も機能していないようです。私の手順でアプローチ#1と#2の唯一の違いを見ることができる限り、#1はlibcurl.dllを使用するコンソールアプリケーションですが、メインプロジェクトではこれはlibcurl.dllにリンクしようとしている別のdllです。 . そのために、アプローチを変更する必要はありますか? 生成された同じマルチスレッド DLL /MD ファイルを両方に使用できますか (/MT を試しても成功しませんでした)? 他のアイデアはありますか?

以下はリンカーオプションです。

- - - - - - - - - - - - - - - - - - - - - - - - -働く--------------------------------------------------

/OUT:"C:\SampleFTP\Release\SampleFTP.exe" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\SampleFTP\SampleFTP\Release" /MANIFEST /MANIFESTFILE:"Release\SampleFTP.exe.intermediate.manifest" /DEBUG /PDB:"c:\SampleFTP\release\SampleFTP.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG /MACHINE:X86 /ERRORREPORT:PROMPT libcurl_imp.lib kernel32.lib user32.lib gdi32. lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

- - - - - - - - - - - - - - - - - - - - - - - - -働く--------------------------------------------------

----------------------------------------------動作しない --- ----------------------------------------------

/OUT:".......\nt\Win32\Release/foo__tests.dll" /INCREMENTAL:NO /NOLOGO /LIBPATH:"C:\FullLibPath\libcurl_libs" /LIBPATH:"......\ nt\Win32\Release" /DLL /MANIFEST /MANIFESTFILE:".\foo__tests\Win32\Release\foo__tests.dll.intermediate.manifest" /DEBUG /PDB:".......\nt\Win32\Release/ foo_tests.pdb" /OPT:REF /OPT:ICF /LTCG /IMPLIB:".......\nt\Win32\Release/foo_tests.lib" /MACHINE:X86 /ERRORREPORT:PROMPT odbc32.lib odbccp32.lib util_process.lib wsock32.lib Version.lib libcurl_imp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ". .....\nt\win32\release\otherlib1.lib" "......\nt\win32\release\otherlib2.lib"

----------------------------------------------動作しない --- ----------------------------------------------

4

3 に答える 3

1

コマンドを実行しましたか

curl-config --cflags
curl-config --libs

--libsの結果を使用して、アプリケーションをリンクする方法を見つけることができました。

于 2010-03-12T09:57:43.230 に答える
1

わかりました...このエンブラッシング....問題を解決することができました。ご想像のとおり、libcurlとは関係ありません..基本的に、libcurlにリンクしているファイルは複数のプロジェクトの一部です。したがって、最初のプロジェクトでライブラリを正しく定義しましたが、他のプロジェクトではそうではありませんでした..そして、ビルドログにはプロジェクト(成功/失敗メッセージ)が次々に表示され、問題に気付くことができたのは、シニア...全体として、謙虚な経験..

ここで学んだ教訓 (将来の訪問者向け) は次のとおりです。Libcurl は成熟した製品であり、基本的なバンドルを作成する可能性は低いです。Windows .dll を使用する場合に必要なのは、1) ソースをダウンロードすることだけです。ソルファイルを開きます。ビルド (リリース dll として)。2) curl ライブラリの追加のヘッダー パスを含めます。3) リンク中に .lib ファイルを依存関係として含めます。4) curl 呼び出しの作成を開始します (ソース内の curl ヘッダーを含む)

そして、あなたは行く準備ができているはずです。開始するために(ホームページの優れたリポジトリ以外)、ここに良いチュートリアルがあります...

http://www.luckyspin.org/?p=28

于 2010-03-12T10:29:13.703 に答える
0

user88595 に同意します。さらに、次の点に注意する必要がある場合があります (経験上)。

これは、プロジェクトに共有ライブラリがある場合です。

「A」が共有ライブラリ プロジェクトである Visual Studio ソリューションがあるとします。「B」はターゲット実行可能プロジェクト (ほとんどの場合、スタートアップ プロジェクト) です。そのため、libcurl.lib の API を実際に呼び出しているのは誰かを実際に確認する必要があります。それらが "A" 内で呼び出されている場合は、プロジェクト "A" の "librarian" プロパティに移動し、libcurl.lib を追加する必要があります。そこへの依存。また、lib パスを追加します。「リンカー」プロパティに依存関係を追加し、「B」へのライブラリパスを追加するという間違いを犯したため、これと同じ問題が発生しました。

LDAPに関するいくつかの追加のリンカエラー:

このセクションに記載されているリンカ エラーを解決すると、LDAP に関するエラーがさらに発生します。これを解決するには、"B" のリンカ依存関係の下に wldap32.lib を追加します。

万歳、アルジュン

于 2011-08-19T07:26:11.120 に答える