libcurl VisualStudio

0

Mam błąd podczas kompilacji projektu w VisualStudio przy urzyciu libcurl

#include "stdafx.h" 
#include <stdio.h> 
#include <curl.h> 
#include <easy.h>
int main() 
{ 
	CURL *curl; 
	CURLcode res; 
	curl = curl_easy_init();
	if (curl) 
	{ 
		curl_easy_setopt(curl, CURLOPT_URL, "http://www.cnn.com/"); 
		res = curl_easy_perform(curl); 
		/* always cleanup */ 
		curl_easy_cleanup(curl);
	}
	return 0;
}
 

błędy:
1>------ Build started: Project: libcurl, Configuration: Debug Win32 ------
1>libcurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_cleanup referenced in function _main
1>libcurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_perform referenced in function _main
1>libcurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_setopt referenced in function _main
1>libcurl.obj : error LNK2019: unresolved external symbol __imp__curl_easy_init referenced in function _main
1>C:\Projekt\libcurl\VisualStudio\libcurl\Debug\libcurl.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

1

Mam błąd podczas kompilacji projektu

Nie masz błędu przy kompilacji, masz błąd przy linkowaniu. Nauczcie się wreszcie rozróżniać fazy procesu budowania aplikacji w C++. Musisz dodać libcurl.libalbo libcurl_imp.lib do dodatkowych bibliotek w opcjach projektu (kategoria linker).

Tak w ogóle to, cholera, wrzucajcie w google stałą część komunikatu o błędzie zanim przylecicie z "problemem" na forum? Temat wałkowany przez miliony programmer-wannabe...

0

ok zlinkowałem i kompiluje ale wywala bląd :
aplikacja nie została właściwie zainicjowana 0xc0150002
skopiowałem pliki:
curlib.dll
libeay32.dll
libeay32.dll
openldap.dll
do debug i windows\system32 i nic

0

By niedawno wątek na ten temat -> link

@Rev opisał tam sposób z właściwościami (czy jak to tam zwał po polsku). Pobawiłem się tym, zmodyfikowałem nieco jego sposób i stworzyłem dwa pliki:

curl_dll_debug.vsprops

<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioPropertySheet
	ProjectType="Visual C++"
	Version="8.00"
	Name="curl_dll_debug"
	>
	<Tool
		Name="VCCLCompilerTool"
		AdditionalIncludeDirectories="&quot;$(cURLPath)include&quot;"
	/>
	<Tool
		Name="VCLibrarianTool"
		AdditionalLibraryDirectories=""
	/>
	<Tool
		Name="VCLinkerTool"
		AdditionalDependencies="&quot;$(cURLPath)lib\Debug\curllib.lib&quot;"
	/>
	<Tool
		Name="VCPostBuildEventTool"
		CommandLine="copy &quot;$(cURLPath)curllib.dll&quot; &quot;$(OutDir)&quot; /Y&#x0D;&#x0A;copy &quot;$(cURLPath)libeay32.dll&quot; &quot;$(OutDir)&quot; /Y&#x0D;&#x0A;copy &quot;$(cURLPath)openldap.dll&quot; &quot;$(OutDir)&quot; /Y&#x0D;&#x0A;copy &quot;$(cURLPath)ssleay32.dll&quot; &quot;$(OutDir)&quot; /Y"
	/>
	<UserMacro
		Name="cURLPath"
		Value="D:\Program Files 2\libcurl-7.19.3-win32-ssl-msvc\"
	/>
</VisualStudioPropertySheet>

curl_dll_release.vsprops

<?xml version="1.0" encoding="windows-1250"?>
<VisualStudioPropertySheet
	ProjectType="Visual C++"
	Version="8.00"
	Name="curl_dll_release"
	>
	<Tool
		Name="VCCLCompilerTool"
		AdditionalIncludeDirectories="&quot;$(cURLPath)include&quot;"
	/>
	<Tool
		Name="VCLibrarianTool"
		AdditionalLibraryDirectories=""
	/>
	<Tool
		Name="VCLinkerTool"
		AdditionalDependencies="&quot;$(cURLPath)lib\Release\curllib.lib&quot;"
	/>
	<Tool
		Name="VCPostBuildEventTool"
		CommandLine="copy &quot;$(cURLPath)curllib.dll&quot; &quot;$(OutDir)&quot; /Y&#x0D;&#x0A;copy &quot;$(cURLPath)libeay32.dll&quot; &quot;$(OutDir)&quot; /Y&#x0D;&#x0A;copy &quot;$(cURLPath)openldap.dll&quot; &quot;$(OutDir)&quot; /Y&#x0D;&#x0A;copy &quot;$(cURLPath)ssleay32.dll&quot; &quot;$(OutDir)&quot; /Y"
	/>
	<UserMacro
		Name="cURLPath"
		Value="D:\Program Files 2\libcurl-7.19.3-win32-ssl-msvc\"
	/>
</VisualStudioPropertySheet>

Wejdź do property managera i dodaj te pliki w odpowiednim miejscu. Później dla każdego wybierz properties -> user macros i zmień ścieżkę na właściwą.

0

Pliki stworzyłeś w notatniku?

0

A jak myślisz? :>

0

Mógłbyś mi to wszystko łopatologicznie wyjaśnić bo wcześniej używałem CodeBlocks'a ale znalazł kurs libcurla tylko do Visual'a.

0

A co tutaj tłumaczyć?

  • otwórz notatnik.
  • wklej zawartość pierwszego pliku, który podałem.
  • zapisz pod nazwą i rozszerzeniem curl_dll_debug.vsprops.
  • analogicznie postąp z drugim plikiem.
  • skopiuj te pliki w jakieś sensowne miejsce (katalog curla lub projektu).
  • otwórz projekt.
  • view -> property manager.
  • prawym na debug -> add existing property sheet.
  • wybierasz curl_dll_debug.vsprops.
  • analogicznie robisz dla release.
  • robisz to, co wcześniej napisałem a propos ustawiania makr.

Powinno działać.

0

Podczas dodawania pliku dostaje błąd :
cannot add property sheet 'C:\Projekt\libcurl_dll.wspropos' as it is either an invalid property sheet,or adding it would cause a circual inheritance of the salected property sheet.

0

.wspropos? A co to za rozszerzenie? Nazwij to tak, jak podałem, żeby było wiadomo, co dodajesz. Pliki wygenerowane były w VS 2005, więc być może to kwestia różnic w wersji IDE, choć w sumie powinien importować, bo starsze projekty visual importuje bez problemu, zatem i tu nie powinno być problemów.

0

oczywiście rozszerzenie to .props
pomyłka przy przepiywaniu błędu.

0

Próbowałeś z rozszerzeniem, które podałem (.vsprops)?

http://support.microsoft.com/kb/2262855 <--- tu jest coś na temat problemów przy konwersji.

pomyłka przy przepiywaniu błędu.

Hehe, a słyszał o czymś takim jak Ctrl + C i Ctrl + V?

0

Tak się złożyło, że miałem dostęp do VS2010EE, to skorzystałem z okazji i:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros">
    <cURLPath>D:\Program Files\libcurl-7.19.3-win32-ssl-msvc\</cURLPath>
  </PropertyGroup>
  <PropertyGroup />
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>"$(cURLPath)include"</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <AdditionalDependencies>"$(cURLPath)lib\release\curllib.lib";%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
    <PostBuildEvent>
      <Command>copy "$(cURLPath)curllib.dll" "$(OutDir)" /Y
copy "$(cURLPath)libeay32.dll" "$(OutDir)" /Y
copy "$(cURLPath)openldap.dll" "$(OutDir)" /Y
copy "$(cURLPath)ssleay32.dll" "$(OutDir)" /Y</Command>
    </PostBuildEvent>
  </ItemDefinitionGroup>
  <ItemGroup>
    <BuildMacro Include="cURLPath">
      <Value>$(cURLPath)</Value>
    </BuildMacro>
  </ItemGroup>
</Project>

Dodaj go do debug i release.

0

Działa a już się chciałem poddać bo miałem złą bibliotekę libsasl.dll ale ściągnąłem inną i wszystko działa.
Wielkie dzięki 0x666

1 użytkowników online, w tym zalogowanych: 0, gości: 1