编译 Curl 和 GTK
Compiling Curl and GTK
当我编译以下代码时
#include <gtk/gtk.h>
#include <curl/curl.h>
#include <iostream>
#include <string>
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
void pop_class()
{
CURL *curl;
CURLcode res;
std::string readBuffer;
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "http://api.openweathermap.org/data/2.5/forecast id=2158867&appid=a4f247bfd153738d2cd1757224361972");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
int main(int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
gtk_init(&argc, &argv);
builder = gtk_builder_new_from_file("glade/window_main.glade");
window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
gtk_builder_connect_signals(builder, NULL);
g_object_unref(builder);
gtk_widget_show(window);
gtk_main();
pop_class();
return 0;
}
// called when window is closed
void on_window_main_destroy()
{
gtk_main_quit();
}
使用以下命令,
g++ -c -g -O0 -Wall -pthread -pipe src/main.cpp -lcurl `pkg-config --cflags --libs gtk+-3.0` -o main.o
我收到此警告:
src/main.cpp: In function ‘void pop_class()’:
src/main.cpp:15:11: warning: variable ‘res’ set but not used [-Wunused-but-set-variable]
15 | CURLcode res;
然后用
编译目标文件
g++ -o temp_app main.o -pthread `pkg-config --cflags --libs gtk+-3.0` -export-dynamic
我收到以下错误:
/usr/bin/ld: main.o: in function `pop_class()':
/home/carl/project/template/src/main.cpp:18: undefined reference to `curl_easy_init'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:22: undefined reference to `curl_easy_setopt'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:23: undefined reference to `curl_easy_setopt'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:24: undefined reference to `curl_easy_setopt'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:25: undefined reference to `curl_easy_perform'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:26: undefined reference to `curl_easy_cleanup'
你所有的错误似乎都与 curl 有关的原因是你忘记在你的第二个命令中告诉编译器 link 它。
换句话说:
g++ -o temp_app main.o -pthread `pkg-config --cflags --libs gtk+-3.0` -export-dynamic
应该变成
g++ -o temp_app main.o -pthread -lcurl `pkg-config --cflags --libs gtk+-3.0` -export-dynamic
当我编译以下代码时
#include <gtk/gtk.h>
#include <curl/curl.h>
#include <iostream>
#include <string>
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
((std::string*)userp)->append((char*)contents, size * nmemb);
return size * nmemb;
}
void pop_class()
{
CURL *curl;
CURLcode res;
std::string readBuffer;
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "http://api.openweathermap.org/data/2.5/forecast id=2158867&appid=a4f247bfd153738d2cd1757224361972");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
int main(int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
gtk_init(&argc, &argv);
builder = gtk_builder_new_from_file("glade/window_main.glade");
window = GTK_WIDGET(gtk_builder_get_object(builder, "window_main"));
gtk_builder_connect_signals(builder, NULL);
g_object_unref(builder);
gtk_widget_show(window);
gtk_main();
pop_class();
return 0;
}
// called when window is closed
void on_window_main_destroy()
{
gtk_main_quit();
}
使用以下命令,
g++ -c -g -O0 -Wall -pthread -pipe src/main.cpp -lcurl `pkg-config --cflags --libs gtk+-3.0` -o main.o
我收到此警告:
src/main.cpp: In function ‘void pop_class()’:
src/main.cpp:15:11: warning: variable ‘res’ set but not used [-Wunused-but-set-variable]
15 | CURLcode res;
然后用
编译目标文件g++ -o temp_app main.o -pthread `pkg-config --cflags --libs gtk+-3.0` -export-dynamic
我收到以下错误:
/usr/bin/ld: main.o: in function `pop_class()':
/home/carl/project/template/src/main.cpp:18: undefined reference to `curl_easy_init'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:22: undefined reference to `curl_easy_setopt'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:23: undefined reference to `curl_easy_setopt'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:24: undefined reference to `curl_easy_setopt'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:25: undefined reference to `curl_easy_perform'
/usr/bin/ld: /home/carl/project/template/src/main.cpp:26: undefined reference to `curl_easy_cleanup'
你所有的错误似乎都与 curl 有关的原因是你忘记在你的第二个命令中告诉编译器 link 它。
换句话说:
g++ -o temp_app main.o -pthread `pkg-config --cflags --libs gtk+-3.0` -export-dynamic
应该变成
g++ -o temp_app main.o -pthread -lcurl `pkg-config --cflags --libs gtk+-3.0` -export-dynamic