ByAdmin | November 18 0 commentadvertisement
After half a month to finally compile the Libcurl library, referring to many blogs on the internet, and eventually compiled their own library.
First of all, I want the purpose of this library. I'm running on the RT5350. OpenWrt need to submit data to the server, using the HTTP protocol, and require SSL encryption. After online search only libcurl appropriate, so I began to cross-compile libcurl with MIPSEL-OPENWRT-LINUX-GCC,
The beginning of the time has been in the CSDN download Libcurl source code package, the version is not the same makefile there will be differences, has been error, specific errors I did not record a pity, later I found a relatively new version of GitHub curl-7.51.0.tar.gz It is best to go to the official website to download I may just start the source package is wrong. After a week of tossing finally put this compile, but I want to support HTTPS so also need to add OpenSSL, reference blog,
But the blog that other people write is not necessarily suitable for their own use, so I recorded this blog
First, compile Libcurl with MIPSEL-OPENWRT-LINUX-GCC
If you do not need to support SSL, configure the time to turn off SSL
1. Unzip the installation package TAR-XVF curl-7.51.0.tar.gz
2. Go to the Catalog CD curl-7.51.0
3. Configuration./configure--prefix=/opt/libcurl-lib CC=MIPSEL-OPENWRT-LINUX-GCC--host=mipsel-linux-with-ssl=/opt/ openssl-lib/
--prefix behind is you when the library to put the place, just like the Linux software installed where, because I do not want to run in the virtual machine as long as this library, so choose/opt/libcurl-lib This directory, then the next step to know
Cc= This is the configuration cross-compilation chain
--host=mipsel-linux This online said is the target machine, that is, the library will compile the program to run the device, I do not understand
-with-ssl=/opt/openssl-lib/This is to open SSL, some version of the default is to open some of the default off, you go to see it haha, =/opt/openssl-lib/This is your reliance on the library where I put it, and later will tell why
4. Compile make-j4-j4 to compile faster as if it were 4 cores.
5. Install (build library) make install this step will put the generated library and so on in the configuration of the time this inside--prefix=/opt/libcurl-lib should be the source package that the need to copy into this area
Second, the above said the need to rely on the library OpenSSL library, let's compile OpenSSL together.
SOURCE Package openssl-1.0.1u.tar.gz
First of all, why did not choose to compare the new version, because I used a lot of versions, makefile are different for reference blog http://blog.csdn.net/clirus/article/details/50151427
I chose the version that was closer to him, but he said, "If it is MIPS cross-compiling, you still need to remove the-m64 suffix from this makefile file after modifying makefile." "I don't have this step, I can't find-m64.
1. Unzip
2. Enter the catalogue
3. Configuration./config No-asm shared--prefix=/opt/openssl-lib--cross-compile-prefix=mipsel-openwrt-linux-
No-asm This I also do not know what to say do not rely on the assembly what, do not understand and then add up
Shared this is because you need to generate a dynamic library, if you do not add a shared compile time will not have-fpic, to observe, but in the compilation of Libcurl when the error said what compile time without-fpic, I press the online said in makefile Modify Plus-fpic is useless, so just add gkfx.
--prefix=/opt/openssl-lib This is mentioned above is the generated library to put in here, compile Libcurl when the dependency library path will be assigned to this
--cross-compile-prefix=mipsel-openwrt-linux-This is the configuration cross-compilation chain
The above one or two order is reversed in fact is to compile OpenSSL, and then compile Libcurl
Finally compiled, eh .....
Test the program, too.
#include <string>using namespace std; FILE *fp;//This function is constructed to conform to curlopt_writefunction//complete data saving function size_t writedata (void *ptr, size_t size, size_t nmemb, void * Stream) {int written = Fwrite (ptr, size, NMEMB, (FILE *) FP); return written;} int PostURL (char *struserpassword) {CURL *curl; Curlcode Res; struct Curl_httppost *post=null; struct Curl_httppost *last=null; String strcredstr =//String Strcurlopt_url =//The server address itself to be connected if ((Fp=fopen ("/opt/1.txt", "W") ==null) {printf ("FOP En (/opt/1.txt) fail\n "); exit (1);} Curl = Curl_easy_init (); if (Curl) {curl_easy_setopt (curl, CURLOPT_URL,STRCURLOPT_URL.C_STR ());//Specify the URL curl_formadd (&post, &last, Curlform_copyname, "Grant_type", Curlform_copycontents, Strcredstr.c_str (), curlform_end); Curl_easy_setopt (Curl, curlopt_httppost, post); Curl_easy_setopt (Curl, Curlopt_ssl_verifypeer, 0L); Curl_easy_setopt (Curl, Curlopt_ssl_verifyhost, 0L); Curl_easy_setopt (Curl, Curlopt_userpwd, Struserpassword); Curlopt_writefunction the subsequent action to the WRITE_DATA function processing//callback function prototype: size_t functions (void *ptr, size_t size, size_t nmemb, Voi D *stream); The function will be called after the Libcurl receives the data, so the function does more data saving functions, such as processing the download file. Curlopt_writedata is used to indicate the source of the stream pointer in the Curlopt_writefunction function. Curl_easy_setopt (Curl, curlopt_writefunction, writedata); res = curl_easy_perform (curl); printf ("%d%s\n", Res, Curl_easy_strerror (res)); Curl_easy_cleanup (curl); } fclose (FP); return 1;} int main (void) {string strusername = "401f8c403a9447119d722b592b2c9957"; string strpassword = " 415d320b18974921b66569d6a89ef369 "; char acusername[1024] =" "; snprintf (Acusername, sizeof (Acusername),"%s:%s ", Strusername.c_str (), Strpassword.c_str ()), Curl_global_init (CURL_GLOBAL_SSL);p Osturl (acusername);}
Oh, yes. There is also a point is to add the library, in the Eclipse Gakou still have order, to try it yourself I can not speak clearly, I do not know why. If you don't know, leave a message.
Http://www.yaoguangkeji.com/a_7kGzGWn3.html
Libcurl supports OpenSSL cross-compiling MIPS rt5350