2017-01-20 21 views
-1

ビジュアルスタジオ2015を使用して、小さなテストカールプログラムを静的にリンクしようとしていますが、正しくリンクできません。 Visual Studio 2015のカールは静的にリンクされません

は、私はその後、私のプロジェクトのディレクトリにlibcurlのディレクトリをコピーし https://github.com/blackrosezy/build-libcurl-windows

に成功働いていたカールをコンパイルするために、このバッチファイルを使用し、私のコードは次のよう

#include "stdafx.h" 
#include "libcurl/include/curl/curl.h" 
#pragma comment(lib, "libcurl/lib/static-debug-x64/libcurl_a_debug.lib") 
#define CURL_STATICLIB 


int main() 
{ 
    curl_global_init(CURL_GLOBAL_DEFAULT); 
    CURL *curl = curl_easy_init(); 
    if (curl) { 
     CURLcode res; 
     curl_easy_setopt(curl, CURLOPT_URL, "http://google.com"); 
     res = curl_easy_perform(curl); 
     curl_easy_cleanup(curl); 
    } 
    curl_global_cleanup(); 
    printf("Press any key to continue\n"); 
    getchar(); 
    return 0; 
} 

あるしかしどんなに私が何をすべきかこれを行うの外に成長して、私のリンカを取得することはできません。

1>CurlTest.obj : error LNK2019: unresolved external symbol __imp_curl_global_init referenced in function main 
1>CurlTest.obj : error LNK2019: unresolved external symbol __imp_curl_global_cleanup referenced in function main 
1>CurlTest.obj : error LNK2019: unresolved external symbol __imp_curl_easy_init referenced in function main 
1>CurlTest.obj : error LNK2019: unresolved external symbol __imp_curl_easy_setopt referenced in function main 
1>CurlTest.obj : error LNK2019: unresolved external symbol __imp_curl_easy_perform referenced in function main 
1>CurlTest.obj : error LNK2019: unresolved external symbol __imp_curl_easy_cleanup referenced in function main 
1>U:\Main\Code\CurlTest\x64\Debug\CurlTest.exe : fatal error LNK1120: 6 unresolved externals 

私はこれらすべてのパスが有効であるを確認した、とBOを使用して試してみましたデバッグとリリースのlibs、および32と64ビット(ビジュアルスタジオで一致する設定で)。これは非静的ライブラリでコンパイルされますが、それは私の.exeファイルだけでなく配布するためのものです。

私はここで間違っていますか?これは非常にイライラしています。#define CURL_STATICLIBディレクティブがこの動作を修正する必要がある同様のスレッドから読み込んだものから、ちょうど幼稚なようです。

+0

http://stackoverflow.com/questions/6302282/how-do-i-link-libcurl-to-my-c-program-in-linux –

+0

これはどのように役立ちますか?私はgccではなく、WindowsとVisual Studioを使用しています。 –

+0

WinBloatでは、リンクは概念的に似ている必要があります。 –

答えて

3
#pragma comment(lib, "wldap32.lib") 
#pragma comment(lib, "crypt32.lib") 
#pragma comment(lib, "Ws2_32.lib") 

#define CURL_STATICLIB 
#include <curl/curl.h> 

これは私のために働いた。

お手数ですが、ご安心ください。

+0

私のために働いた。ありがとう! – Ricky65

1

私はこのことを考えて、補完するためにGigi's answerを案内します。

  • #define CURL_STATICLIBはプリプロセッサディレクティブです。同じ "ファイル"内に存在するコードに影響を与え、その後ろにのみ現れます。

  • プリプロセッサディレクティブはリンクインコードには影響しません。リンクは、コンパイルプロセスの別のフェーズです。本質的に、考慮しなさい:それはlibcurl.libに影響できません。現在のファイルにのみ影響します。

  • 次にコードを考えてみましょう。あなたのコードはCURL_STATICLIBのためにチェックされません。しかし、実験のために、CURL_STATICLIBを定義すると何かが変化すると仮定してみましょう。

  • このプリプロセッサディレクティブが実際に他の人の提案に影響を与えていた場合は、#include dという別のコードにプリプロセッサを介してこの特定のファイルに影響を与える必要があります。つまり、はおそらくcurl/curl.hの何かに影響します。要するに

... はあなたが#defineのいずれかを移動しようとしたがあります:(a)のプロジェクト設定、または(b)のちょうど#include <curl/curl.h>上記?


自体に<curl/curl.h>があなたの#include "libcurl/include/curl/curl.h"の正しい言い回しになることに注意してください。他のプラットフォームやプラットフォーム上で共有されているコードからコードを構築する場合は、自分のものを「標準的な」方法で組み込むことをお勧めします。ほとんどの場合、移植性を計画するのは良い方法です。

通常、cURLのヘッダーは/usr/include/curl/...(したがってcurl/...)にシステム全体に(したがって<>)インストールされます。

関連する問題