I'm having some unknown issue trying to use the curl library in my c++ application.
This is what I have done so far:
Download latest version of curl
Build curl "nmake /f Makefile.vc mode=dll VC=12" - i get the following folders and files:
bin -> libcurl.dll
include -> curl -> bunch of .h files
lib -> libcurl.lib
Next I open Visual Studio 2015 Update 3 and go to Configuration Properties:
C/C++ -> General -> Additional include directories -> ..\curl\include
and
Linker-->Input->Additional Dependencies--> ..\curl\lib\libcurl.lib
and then copy the .dll to the debug folder.
This procedure has worked for me for another library but for CURL i am getting the error message:
"Error LNK1104 cannot open file '..\curl\libcurl.lib'"
I can #include "curl\curl.h" without any errors. Problem seems to be with the lib file. I have been looking all over the web for 6 hours, I'm totally lost.
The general preferred usage in VS is to specify additional library directories (Linker->General->Additional Library Directories) where you specify the path of your curl lib.
Then add the libcurl.lib to your additional linker dependencies.
Related
I'm working on a c++ project on my Raspberry Pi. I'm using Visual Studio 2017 to cross-compile the project to my Raspberry.
But when I try to compile the project, I get the error"cannot open source file" in lots of header files.
I already managed to compile simple projects, but now I need to Include Directories and I don't know the proper syntax to set, on Visual Studio's project properties page, the Include Directories to tell the compile where the header files are stored.
For the PCL library, e.g., I was able to include directories using '$(INCLUDE_PCL)'.
But when I try to include pi's directory '/usr/Include/ni' I can't correctly set the absolute path. Here's an screenshot of my properties page (https://ibb.co/G2dszrx). I haven't set the Linker directories yet, since I'm currently getting errors on the compiling phase.
Does anyone knows how to set absolute path to include directories correctly?
EDITED:
Trying to figure this out, I created a new project (Proj) in which I include the file 'try.cpp' stored in the raspberry's "home/pi/projects" folder. This project is in the "/home/pi/projects/Proj" folder.
In the project property page, I have:
Configuration Properties>General>Remote Build Root Directory --> ~/projects
Configuration Properties>General>Remote Build Project Directory --> $(RemoteRootDir)/$(ProjectName)
C/C++>General>Additional Include Directories --> $(RemoteRootDir)
When I compile the project this path gets created correctly, and the project is saved at the correct place, even if go further into more folders in the remote build project directory, but it can't find the include file "try.h".
How can Visual Studio know where to save the project using '$(RemoteRootDir)', but is not able to add that path include directory?
After some searching I managed to correctly add the Additional Include Directories, and Additional Libraries.
Firstly I was also using OpenNI, to work with the PCL. After many tries, I discovered that OpenNI was not correctly installed. So I managed to install it with apt-get.
Secondly, If you want to include the "/home/pi/someDIR" directory at the Raspberry device, just add "/home/pi/someDIR" to Visual Studio's additional include directories.
For you still trying to achieve this, Merlyn Oppenheim, from visual studio, set up a sample project using VS 2019 and Raspberry PI template -> https://github.com/merlynoppenheim/sample-rasp-inc-headers
For this sample project the Visual Studio properties page should have:
C/C++ -> General -> Additional Include Directories = '/home/pi/projects/vcpkg/packages/sqlite3_x64-linux/include;%(AdditionalIncludeDirectories)'
C/C++ -> Linker -> General -> Additional Library Directories = '/home/pi/projects/vcpkg/packages/sqlite3_x64-linux/debug/lib;%(AdditionalLibraryDirectories)'
C/C++ -> Linker -> Input -> Library Dependencies = 'wiringPi;sqlite3;pthread;dl'
I'm using VS 2019, have downloaded all the cURLpp headers, put them and the cURL headers in an include folder and added this include directory under Project Properties -> Additional Include Directories. When I try to build example00.cpp from the cURLpp site, I get errors saying I have an unresolved external symbol. I've never used a third party library with C++ before, so please explain like I'm an idiot. Should I have a dll or lib file?
I use vcpkg to install curlpp, and I find that my project configuration in visual studio is x64, if I use x86 curlpp it will get build error, I need to use x64 curlpp then build sucess.
This is the include step:
Run cmd command: vcpkg install curlpp:x64-windows
goto Project > Configuration Properties -> Linker -> General -> Additional Library Directories, add yourVcpkgFolderPath\vcpkg\installed\x64-windows\lib\
goto Project > Configuration Properties -> Linker -> Input -> Additional Dependencies, add curlpp.lib
Then build the project, it should build success.
I'm trying to add the Boost C++ Libraries to my C++ project created with Visual Studio 2017.
I have followed the instructions here.
When that didn't work I tried the advice in this post. Neither solutions worked for me.
What I have done:
Downloaded boost_1_69_0-msvc-14.1-64.exe from this precompiled boost libraries page
Installed to D:\local\boost_1_69_0
In my project I added D:\local\boost_1_69_0 to Properties > VC++ Directories > Include Directories and added D:\local\boost_1_69_0\lib64-msvc-14.1 to Properties > VC++ Directories > Library Directories
I have my project set to x64 and the above settings were set in the x64 configuration
When I try to build my project I get this error:
Error C1083 Cannot open include file: 'boost/regex.hpp': No such file or directory
Which points to this line of code in one of my .cpp files:
#include <boost/regex.hpp>
Please go to D:\local\boost_1_69_0 folder and see if you have a sub-folder named include in there. If you do, then instead of D:\local\boost_1_69_0 you need to set D:\local\boost_1_69_0\include in Properties > VC++ Directories > Include Directories
In other words, try to find the file you are including on your hard drive. Look at the full path to the file. Compare that full path with the path you added to the list of include directories (Properties > VC++ Directories > Include Directories) concatenated with the relative path you provided just before the filename in your include directive (boost). See if the two are the same.
If that does not help, then make sure you changed list of include directories for the same build configuration as you are attempting to build (if you build Debug, make sure you changed configuration for Debug too). Since VS 2015 IDE stopped making sure the two are selected in sync, which is annoying.
If your files are copied, then you have to compile the regular library.... If the same version of the compiler copies the machine.
Found out it was failing because I had included the same .cpp file which has the boost include into my unit test project which did NOT have the Include/Library folders set. The settings in my original question work now.
I want to use the zlib library in my c++ project. So, I have downloaded zlib library(zlib_1_2_8_msvc2015_64.zip).
Then, I have created zlib folder under "C:\Program Files\Zlib". Then, Extract zlib_1_2_8_msvc2015_64.zip file into "C:\Program Files\Zlib".
After that, I have opened visual studio 2017 and goes to property => C/C++ => general => additional include directories and
added that path : "C:\Program Files\Zlib\msvc2015_64".
After that, I have added #include <zlib.h> header file in my project. but, not working.
So, How to use zlib library in visual studio 2017?
For static library installation , include the zlibstatic.lib and directories in the linker additional libraries and directories. For dynamic library , include the zlib.lib in the linker and copy the zlib.dll to the project output directory.
Another option is to install vcpkg ( MS packager to install windows based open source projects) and use powershell command like so .\vcpkg install zlib:x64-windows-static. The zlib can be auto integrated to your project using .\vcpkg integrate install
You have specified where to find the header files.
You also need to find which library to bind and where to find it.
For Visual Studio 2012:
In linker section -> General -> additional library directories, you can specify the path where the library resides
In linker section -> Input -> additional dependancy , you can specify the actual lib name to bind
Its a simple fix copy all contents of msvc2015_64 directory into zlib directory and you are good to go.
I am having trouble getting LibCurl to work with Visual Studio 2013. I downloaded the current version (curl-7.33.0) and tried following the instructions I found on this site: Using LibCurl with Visual 2010
But I can't find curllib.lib in the folder I downloaded. And I am still getting errors:
After searching the internet for more help. I now get these error messages. There appears to be a problem with linking to libcurl.lib?
This is what I have configured:
Inside /lib I have libcurl.lib and libcurl.dll
UPDATE
I downloaded this release for Win32 MSVC: http://curl.haxx.se/download.html#Win32
After adding the libcurl libraries and successfully compiling, I am now getting this error message:
The application was unable to start correctly (0xc000007b). Click OK to close the application.
Here is the sample code I am trying to run:
#include <iostream>
#include <stdio.h>
#include <curl/curl.h>
int main(void)
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://google.com");
res = curl_easy_perform(curl);
/* always cleanup */
curl_easy_cleanup(curl);
}
return 0;
}
FINAL UPDATE
I believe I have gotten LibCurl to work with Visual Studio 2013 now. Persistence ftw!
Although, after spending hours trying to solve these error messages, I am a little hesitant at saying everything is working fine now. That is why I am putting a bounty on this question to get clear and concise instructions on getting LibCurl to work with Visual Studio 2013.
This is what I did to get it to work:
First, download the Win32 MSVC package here: http://curl.haxx.se/download.html#Win32
For these instructions sake, let's say you downloaded to C:\LibCurl
Start a new project in Visual Studio. Go to Project|Project Properties|VC++ Directories|Include Directories|
Add the path to the include directory inside the downloaded package. (C:\LibCurl\include)
Next, go to Project|Project Properties|Linker|General|Additional Library Directories|
Add the path to the lib directory. (Where curllib.dll is located)
Then, go to Project|Project Properties|Linker|Input|Additional Dependencies|
And add curllib.lib
Now if you compile a test program, you will likely get the message saying libsasl.dll is missing. You will need to download this file and put it in the same directory as your build.
I used 7-Zip to extract libsasl.dll from OpenLDAP for Windows. OpenLDAP for Windows
This is the result of my test code from above:
A lot of these instructions are out of date because they recommend the win32-ssl-devel-msvc package for curl, which no longer exists.
The following instructions allow you to build libcurl using only:
Visual Studio 2013
curl generic source tarball (tested on curl 7.44.0).
A. Build libcurl static library
Download the latest curl generic source from: http://curl.haxx.se/latest.cgi?curl=tar.gz
Extract the source to a local directory (we'll be using C:\libcurl)
Open a command prompt
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\vcvars32.bat" To initialize your VC environment variables (adjust your VS 2013 installation directory as needed)
cd C:\libcurl\winbuild
nmake /f Makefile.vc mode=static VC=12
The build should appear in C:\libcurl\builds\libcurl-vc12-x86-release-static-ipv6-sspi-winssl
B. Link Against libcurl in Visual Studio
In Visual Studio, right click your project in Solution Explorer, then click "Properties"
Configuration Properties > C/C++ > General > Additional Include Directories: add C:\libcurl\builds\libcurl-vc12-x86-release-static-ipv6-sspi-winssl\include
Configuration Properties > C/C++ > Preprocessor > Preprocessor Definitions: add CURL_STATICLIB
Configuration Properties > Linker > General > Additional Library Directories: add C:\libcurl\builds\libcurl-vc12-x86-release-static-ipv6-sspi-winssl\lib
Configuration Properties > Linker > Input > Additional Dependencies: add libcurl_a.lib
C. Call libcurl from Your Project
The following sample shows a call to libcurl:
#include "stdafx.h"
#include <curl/curl.h>
void main(int argc, char* argv[])
{
CURL *curl = curl_easy_init();
if (curl) printf("curl_easy_init() succeeded!\n");
else fprintf(stderr, "Error calling curl_easy_init().\n");
}
I would say that in a comment, but I am lacking in points.
You don't have to copy any .dll into your program run catalog.
Go to Project | Properties | Configuration Properties and in line Envrionment write: PATH=$(ExecutablePath)$(LocalDebuggerEnvironment).
From now on, all .dlls from any catalog you mention in Project|Project Properties|VC++ Directories|Binary should be usable without copying them.
The rest is exactly as you written.
The easiest way to do this that I found is first make sure that nuget is installed.
http://www.nuget.org/
Then create your project.
Then go to http://www.nuget.org/packages/curl/ and follow the instructions which is to go the package manager console and type PM> Install-Package curl
If you then look for the packages directory in your project directory, you will find the include files and the library files. Note that there is a version for Visual Studio 110, not 120, but because libcurl is a C library you can use it with Visual Studio 2013. Make sure the include directory and lib directory are specified under the Visual C++ directories in project properties.
Make sure you have the following files as addition input to the linker
libcurl.lib;libeay32.lib;ssleay32.lib;Ws2_32.lib;libssh2.lib;zlib.lib;wldap32.lib;
Another way to use curl/libcurl is build with CMake v2.8.12+ (assuming that git is already installed on your computer)
Open cmd window and change dir to appropriate folder
git clone https://github.com/bagder/curl.git
mkdir msbuild
cd msbuild
cmake ..\curl -G"Visual Studio 12 Win64" -DCMAKE_INSTALL_PREFIX=C:\curl.vc12 -DCURL_STATICLIB=ON
< ... lots of output here ... >
Open generated CURL.sln in Visual studio and build it.
CMake options I use in example
-G selects build generator. In our case Visual Studio 2013 64 bit target
-DCMAKE_INSTALL_PREFIX - provides root folder where targets should be installed
-DCURL_STATICLIB=ON - generates build for static library
After building install target, your will find bin/include/lib folders in C:\curl.vc12
Provide those path to your solution and build your code with curl lib.
I tried to do it from scratch with VS2012 (I don't have 2013) and it works perfectly.
I downloaded version 7.19.3 from http://curl.haxx.se/latest.cgi?curl=win32-ssl-devel-msvc because it's the only available version for VS.
I added the include directory, not the curl directory as he says in the tutorial.
I compiled a small toy project without any problem.
So, I'm not sure what your problem is, but:
Make sure you download the right archive.
Try to put the cURL folder on a path without space.
If you know someone who use VS2012 or older, try your code with the same include and lib and see if it works.
Paste a minimal working example of your code so I can test it.
This is a bit late, but for those who still have problems, this method worked best for me:
Add VS to the system PATH:
For example: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin.
Download current curl-X.zip from http://curl.haxx.se/download.html and unzip.
Open command line at curl-X/winbuild.
Call vcvars32.bat.
Call nmake /f Makefile.vc mode=static VC=12.
Goto curl-X/builds/libcurl-XXX.
There you find the includes and a libcurl_a.lib.
This lib works fine for me.
Remember to define -DCURL_STATICLIB when you compile your code with this lib.
For Visual Studio 2017, the steps in link worked for me. In case the link expires or specifically for those who download the libcurl zip file instead of cloning from GitHub, I will note down the steps here.
Set environment variables with “C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat” x64. If the command is successful, you will see a message that says Environment initialized for 'x64'
Download and extract the compressed libcurl file from download libcurl. I used the .zip file.
cd into winbuild directory inside the extracted libcurl folder.
Run nmake /f Makefile.vc mode=dll MACHINE=x64 to build. For more information on build options, please refer to BUILD.WINDOWS text file in winbuild folder.
Go up one directory level and cd into builds folder to find the compiled files.
All the best!
The problem is that the targets for the default VS2013 platform tools are not set in the NuGet packages. This is why it works in VS2012 but not VS2013. I manually created replacement targets files. Instructions and download:
https://github.com/evoskuil/curl-nuget-targets
Download the curl v7.37.0 source code and use the Visual Studio project files provided.
I've spent the last few weeks polishing my own personal project files, that were based off the original VC6 files, and adding them to the repository.
.dsw / .dsp (VC6), .sln / .vcproj (VC7, VC7.1, VC8 and VC9 as well as .sln / .vcxproj (VC10, VC11 and VC12) files are provided for both DLL and Static Library builds with support for OpenSSL and Windows SSPI / SChannel in both Win32 and x64 configurations.
I found an easy way to get it work in VC++ using the latest package. I basically followed the steps in Using libcurl in Visual Studio. The libcurl and VC++ are very old in the instruction.
First download the ZIP file on download page https://curl.haxx.se/download.html The ZIP package is https://curl.haxx.se/download/curl-7.50.1.zip
Go to projects-> Windows\VC10 (or your version of VC)\lib\libcurl.sln, open the project in VC++.
Build the project in DLL Release. DLL debug doesn't work on my VC++.
Go to build\Win32\VC10\DLL Release, you can find the lib and dll files generated from previous step.
Create a folder new, with include and lib folders. Copy the libcurb.dll and libcurb.lib whatever is in the DLL Release folder to the new\lib. Copy everything in curl-7.50.1\include to new\include folder.
C++ Properties -> Configuration Properties -> VC++ Directories, add new\include to Include Directories, new\lib to Library Directories; add new\lib to Linker -> General -> Additional Library Directories, add libcurl.lib to Linker -> Input -> Additional Dependencies
It seems that I have to put the dll file under the same folder with executable file.
It should work.