37.Linux installe la bibliothèque libcurl: interagissez avec le serveur http construit par hfs

Blog de référence: https://blog.csdn.net/qianghaohao

Un: Téléchargez et décompressez:

1. Téléchargement:
https://github.com/curl/

2. Décompressez:

sudo tar -zxvf curl-7.66.0.tar.gz -C .

Deux: Compilez:

1. Entrez dans le dossier curl-7.66.0 et exécutez les instructions suivantes:

sudo ./buildconf

2. Créez un dossier install_lib dans ce répertoire pour stocker les fichiers d'en-tête et les bibliothèques générés:

mkdir install_lib

/home/aston/huawei/curl-7.66.0/install_lib

3. Configuration:

sudo ./configure --prefix=/home/aston/huawei/curl-7.66.0/install_lib --enable-debug

4. Compilez:

sudo make
sudo make install

5. Affichez les fichiers de bibliothèque et les fichiers d'en-tête générés:

aston@ubuntu:~/huawei/curl-7.66.0/install_lib$ ls include/curl/
curl.h     easy.h     multi.h        system.h         urlapi.h
curlver.h  mprintf.h  stdcheaders.h  typecheck-gcc.h
aston@ubuntu:~/huawei/curl-7.66.0/install_lib$ ls lib/
libcurl.a  libcurl.la  libcurl.so  libcurl.so.4  libcurl.so.4.6.0  pkgconfig

6. outil curl-config:
Après l'installation, il existe un outil curl-config dans le répertoire bin, qui peut être utilisé pour afficher les informations de configuration et de version liées à curl:

aston@ubuntu:~/huawei/curl-7.66.0/install_lib/bin$ ./curl-config --libs
-L/home/aston/huawei/curl-7.66.0/install_lib/lib -lcurl
aston@ubuntu:~/huawei/curl-7.66.0/install_lib/bin$ ./curl-config --version
libcurl 7.66.0

Trois: Test:

1. Code:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
#include <curl/curl.h>
//#include <curl/types.h>
#include <curl/easy.h>
 
FILE *fp = NULL;  //定义FILE类型指针

//这个函数是为了符合CURLOPT_WRITEFUNCTION而构造的
//完成数据保存功能

size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream)  
{
    
    
    int written = fwrite(ptr, size, nmemb, (FILE *)fp);
	
    return written;
}
 
int main(int argc, char *argv[])
{
    
    
    CURL *curl;
	
    if (argc != 3)
    {
    
    
		fprintf(stderr, "usage: %s url filename\n", argv[0]);
		exit(-1);
    }
	
    curl_global_init(CURL_GLOBAL_ALL);  
    curl = curl_easy_init();
    curl_easy_setopt(curl, CURLOPT_URL, argv[1]);  
 
    if((fp = fopen(argv[2],"w")) == NULL)
    {
    
    
        curl_easy_cleanup(curl);
        exit(1);
    }
	
  //CURLOPT_WRITEFUNCTION 将后继的动作交给write_data函数处理
  
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_perform(curl);
    curl_easy_cleanup(curl);
	
    exit(0);
}

2. Compilez:

g++ test_curl.cpp -g -I./include -L./lib -lcurl -std=c++11 -o app.out

Quatre: Télécharger le test de la page Web:

1. Testez et téléchargez la page Web Baidu lorsque la machine virtuelle n'est pas connectée à Internet:

./app.out https://www.baidu.com/ index.html

Remarque: comme
il n'est pas connecté à Internet, il n'est pas téléchargé sur la page Web de Baidu, index.html est un fichier vide;

2. Une fois la machine virtuelle connectée à Internet, la page Web Baidu normale est téléchargée:

./app.out https://www.baidu.com/ index2.html

Remarque:
index2.html est une page Web normale;

3. Autres tests, télécharger des fichiers texte, des fichiers image et des fichiers vidéo;

./app.out http://192.168.107.8:8080/httpserver/http/test1.txt text1.txt
./app.out http://192.168.107.8:8080/httpserver/http/yh.jpg yh.jpg
./app.out http://192.168.107.8:8080/httpserver/http/WeChat_20200305221815.mp4 WeChat_20200305221815.mp4
./app.out https://blog.csdn.net/yanghangwww/article/details/112006433 csdn.html

Insérez la description de l'image ici
Insérez la description de l'image ici
Insérez la description de l'image ici

Cinq: lorsque l'appareil n'est pas connecté à Internet, la machine virtuelle ou la carte de développement télécharge les fichiers sur le serveur http créé par Windows:

1. Assurez-vous que la machine virtuelle peut envoyer une requête ping à Windows:
2. Modifiez l'IP du serveur http sur l'ip de Windows: 192.168.1.20 (changez simplement l'original 192.168.107.8 directement)
Image:

3. La machine virtuelle ou la carte de développement peut obtenir directement les fichiers du serveur http:
Insérez la description de l'image ici

4. Autres tests:
./app.out http://192.168.1.20:8080/httpserver/http/test1.txt linux_text1.txt
./app.out http://192.168.1.20:8080/httpserver/http/yh .jpg linux_yh.jpg
./app.out http://192.168.1.20:8080/httpserver/http/WeChat_20200305221815.mp4 linux_WeChat_20200305221815.mp4

Six: Portage vers la carte de développement:

1. Compilez:

sudo tar -zxvf curl-7.66.0.tar.gz -C .
sudo ./buildconf
mkdir install_lib
sudo ./configure --host=arm-linux CC=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-gcc  CXX=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-g++ --prefix=/home/aston/huawei_linux/curl-7.66.0/install_lib
sudo make
sudo make install

Sept: Problèmes rencontrés lors de la transplantation:

1. Une erreur est signalée après sudo ./configure:

configure: error: C compiler cannot create executables

Raison: En regardant config.log, on constate que la chaîne d'outils de compilation croisée est introuvable:

./configure: line 4261: arm-hisiv300-linux-gcc: command not found

2. Affichez les variables d'environnement:

echo $PATH
/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/bin:/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
aston@ubuntu:~/huawei_linux/curl-7.66.0$ 

On constate que le chemin de la chaîne d'outils de compilation croisée est incorrect et que la cible est manquante:

错误的路径:
CC=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/bin/arm-hisiv300-linux-gcc  
正确的路径:
CC=/opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-gcc  

3. Si vous ne spécifiez pas le chemin absolu de la chaîne d'outils de compilation croisée, une erreur peut être signalée:

./configure --host=arm-linux CC=arm-hisiv300-linux-gcc CXX=arm-hisiv300-linux-g++

4. Erreur d'exécution sur la carte de développement:

/mnt/test # ./app.out 
./app.out: can't load library 'libcurl.so.4'

Raison: la bibliothèque libcurl.so.4 est introuvable

5. Vérifiez les variables d'environnement de la bibliothèque de liens de périphériques: aucune des trois:

/mnt/test # echo $LD_LIBRARY_PATH
/usr/local/lib:/usr/lib:/lib
/mnt/test # 

6. Copiez libcurl.so.4 dans / usr / lib

mv libcurl.so.4 /usr/lib/ -f

7. Réexécution, succès:

/mnt/test # ./app.out 
[1970-01-01 00:21:10-DBG: app.c:main-1095] yang i = 100
/mnt/test # ls
test_WeChat_20200305221815.mp4
test_test1.txt
test_yh.jpg

Huit: libcurl compile la bibliothèque statique, il faut ajouter -lpthread:

CFLAGS += -g -static
LDFLAGS += -lcurl -std=c++11 -lpthread 

Je suppose que tu aimes

Origine blog.csdn.net/yanghangwww/article/details/113059590
conseillé
Classement