【问题标题】:Compiling Curl and GTK编译 Curl 和 GTK
【发布时间】:2021-05-12 00:54:33
【问题描述】:

当我编译以下代码时

#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'

【问题讨论】:

    标签: c++ curl g++


    【解决方案1】:

    你的所有错误似乎都与 curl 相关的原因是你忘记告诉编译器在你的第二个命令中链接到它。

    换句话说:

    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
    

    【讨论】:

    • 这是一个不同的问题,您应该在其中发布您的 glade 文件,但可能您有一个 XML 条目,它描述了一个具有给定名称的信号作为回调。要么删除该条目,要么在代码中正确定义该回调
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多