Blog de référence: https://blog.csdn.net/qianghaohao
table des matières
- Un: Téléchargez et décompressez:
- Deux: Compilez:
- Trois: Test:
- Quatre: Télécharger le test de la page Web:
- 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:
- Six: Portage vers la carte de développement:
- Sept: Problèmes rencontrés lors de la transplantation:
- Huit: libcurl compile la bibliothèque statique, il faut ajouter -lpthread:
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
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:
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