GTK 编译适用于 gcc,但不适用于 g++。 g++ 无法识别 -rdynamic 命令
GTK compiling works with gcc but not with g++. g++ does not recognize -rdynamic command
这是我的 main.c 和 main.cpp
代码
#include <gtk/gtk.h>
void quitButtonClicked(__attribute__((unused)) GtkWidget *widget,
__attribute__((unused)) gpointer data)
{
g_print("Quit Clicked\n");
gtk_main_quit();
}
// Handle the user trying to close the window
gboolean windowDelete(__attribute__((unused)) GtkWidget *widget,
__attribute__((unused)) GdkEvent *event,
__attribute__((unused)) gpointer data)
{
g_print("%s called.\n",__FUNCTION__);
return FALSE; // Returning TRUE stops the window being deleted.
// Returning FALSE allows deletion.
}
int main ( int argc, char **argv) {
GtkWidget *window;
GtkBuilder *builder = NULL;
gtk_init (&argc , &argv);
builder = gtk_builder_new();
if(gtk_builder_add_from_file (builder,"window_main.glade" , NULL) == 0)
{
printf("gtk_builder_add_from_file FAILED\n");
return(0);
}
window = GTK_WIDGET (gtk_builder_get_object (builder,"window1"));
gtk_builder_connect_signals(builder,NULL);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
编译时
gcc -o hello_world $(pkg-config --cflags --libs gtk+-3.0) -rdynamic main.c
一切顺利。
但是运行这不起作用。
g++ -o hello_world $(pkg-config --cflags --libs gtkmm-3.0) -rdynamic main.cpp
我收到此警告。
(hello_world:40684): Gtk-WARNING **: 15:32:33.179: 找不到信号处理程序 'windowDelete'。您是否使用 -rdynamic 进行编译?
我该怎么做才能修改我的 g++ 编译以确保其按预期工作?我想 运行 C++ 代码以后不是 C.
你必须用
包围函数
extern "C" {
}
否则 function/symbol 名称会被 C++ 损坏,GTK 无法查找。
这是我的 main.c 和 main.cpp
代码#include <gtk/gtk.h>
void quitButtonClicked(__attribute__((unused)) GtkWidget *widget,
__attribute__((unused)) gpointer data)
{
g_print("Quit Clicked\n");
gtk_main_quit();
}
// Handle the user trying to close the window
gboolean windowDelete(__attribute__((unused)) GtkWidget *widget,
__attribute__((unused)) GdkEvent *event,
__attribute__((unused)) gpointer data)
{
g_print("%s called.\n",__FUNCTION__);
return FALSE; // Returning TRUE stops the window being deleted.
// Returning FALSE allows deletion.
}
int main ( int argc, char **argv) {
GtkWidget *window;
GtkBuilder *builder = NULL;
gtk_init (&argc , &argv);
builder = gtk_builder_new();
if(gtk_builder_add_from_file (builder,"window_main.glade" , NULL) == 0)
{
printf("gtk_builder_add_from_file FAILED\n");
return(0);
}
window = GTK_WIDGET (gtk_builder_get_object (builder,"window1"));
gtk_builder_connect_signals(builder,NULL);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}
编译时 gcc -o hello_world $(pkg-config --cflags --libs gtk+-3.0) -rdynamic main.c
一切顺利。
但是运行这不起作用。 g++ -o hello_world $(pkg-config --cflags --libs gtkmm-3.0) -rdynamic main.cpp
我收到此警告。
(hello_world:40684): Gtk-WARNING **: 15:32:33.179: 找不到信号处理程序 'windowDelete'。您是否使用 -rdynamic 进行编译?
我该怎么做才能修改我的 g++ 编译以确保其按预期工作?我想 运行 C++ 代码以后不是 C.
你必须用
包围函数 extern "C" {
}
否则 function/symbol 名称会被 C++ 损坏,GTK 无法查找。