mirror of https://github.com/moparisthebest/curl
filled-in text in the "Building" chapter and added a "libcurl with C++"
chapter
This commit is contained in:
parent
e177f14595
commit
01ecb1d7e7
|
@ -10,7 +10,7 @@ PROGRAMMING WITH LIBCURL
|
||||||
About this Document
|
About this Document
|
||||||
|
|
||||||
This document will attempt to describe the general principle and some basic
|
This document will attempt to describe the general principle and some basic
|
||||||
approach to consider when programming with libcurl. The text will focus
|
approaches to consider when programming with libcurl. The text will focus
|
||||||
mainly on the C/C++ interface but might apply fairly well on other interfaces
|
mainly on the C/C++ interface but might apply fairly well on other interfaces
|
||||||
as well as they usually follow the C one pretty closely.
|
as well as they usually follow the C one pretty closely.
|
||||||
|
|
||||||
|
@ -23,12 +23,44 @@ About this Document
|
||||||
|
|
||||||
Building
|
Building
|
||||||
|
|
||||||
|
There are many different ways to build C programs. This chapter will assume
|
||||||
|
a unix-style build process
|
||||||
|
|
||||||
Compiling the Program
|
Compiling the Program
|
||||||
|
|
||||||
|
Your compiler needs to know where the libcurl headers are
|
||||||
|
located. Therefore you must set your compiler's include path to point to
|
||||||
|
the directory where you installed them. The 'curl-config' tool can be used
|
||||||
|
to get this information:
|
||||||
|
|
||||||
|
$ curl-config --cflags
|
||||||
|
|
||||||
Linking the Program with libcurl
|
Linking the Program with libcurl
|
||||||
|
|
||||||
|
When having compiled the program, you need to link your object files to
|
||||||
|
create a single executable. For that to succeed, you need to link with
|
||||||
|
libcurl and possibly also with other libraries that libcurl itself depends
|
||||||
|
on. Like OpenSSL librararies, but even some standard OS libraries may be
|
||||||
|
needed on the command line. To figure out which flags to use, once again
|
||||||
|
the 'curl-config' tool comes to the rescue:
|
||||||
|
|
||||||
|
$ curl-config --libs
|
||||||
|
|
||||||
SSL or Not
|
SSL or Not
|
||||||
|
|
||||||
|
libcurl can be built and customized in many ways. One of the things that
|
||||||
|
varies from different libraries and builds is the support for SSL-based
|
||||||
|
transfers, like HTTPS and FTPS. If OpenSSL was detected properly at
|
||||||
|
build-time, libcurl will be built with SSL support. To figure out if an
|
||||||
|
installed libcurl has been built with SSL support enabled, use
|
||||||
|
'curl-config' like this:
|
||||||
|
|
||||||
|
$ curl-config --feature
|
||||||
|
|
||||||
|
And if SSL is supported, the keyword 'SSL' will be written to stdout,
|
||||||
|
possibly together with a few other features that can be on and off on
|
||||||
|
different libcurls.
|
||||||
|
|
||||||
|
|
||||||
Global Preparation
|
Global Preparation
|
||||||
|
|
||||||
|
@ -199,6 +231,27 @@ Upload Data to a Remote Site
|
||||||
fast as possible. The callback should return the number of bytes it wrote in
|
fast as possible. The callback should return the number of bytes it wrote in
|
||||||
the buffer. Returning 0 will signal the end of the upload.
|
the buffer. Returning 0 will signal the end of the upload.
|
||||||
|
|
||||||
|
libcurl with C++
|
||||||
|
|
||||||
|
There's basicly only one thing to keep in mind when using C++ instead of C
|
||||||
|
when interfacing libcurl:
|
||||||
|
|
||||||
|
"The Callbacks Must Be Plain C"
|
||||||
|
|
||||||
|
So if you want a write callback set in libcurl, you should put it within
|
||||||
|
'extern'. Similar to this:
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
size_t write_data(void *ptr, size_t size, size_t nmemb,
|
||||||
|
void *ourpointer)
|
||||||
|
{
|
||||||
|
/* do what you want with the data */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
This will of course effectively turn the callback code into C. There won't be
|
||||||
|
any "this" pointer available etc.
|
||||||
|
|
||||||
|
|
||||||
-----
|
-----
|
||||||
Footnotes:
|
Footnotes:
|
||||||
|
|
Loading…
Reference in New Issue