Help me Stackoverflow!
So, I feel that I have set up my environment correctly but I cannot build my program!
#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
using namespace std;
/*
* simple gtk application
* author jan bodnar
* date february 17, 2008
*/
int main(int argc, char** argv) {
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 100);
gtk_window_set_title(GTK_WINDOW(window), "gtkapp");
gtk_widget_show(window);
g_signal_connect(window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);
gtk_main();
return (EXIT_SUCCESS);
}
I generated my list of include dirs from this command: pkg-config --cflags gtk+-2.0
Then I added the include files in the C++ compiler settings in netbeans...
My include directories:
../gtk/include/gtk-2.0 ../gtk/lib/gtk-2.0/include ../gtk/include/atk-1.0 ../gtk/include/cairo ../gtk/include/pango-1.0 ../gtk/include/glib-2.0 ../gtk/lib/glib-2.0/include ../gtk/include/libpng12
Then I generated a list of libs from this command: pkg-config --libs gtk+-2.0
Then added my libs to the linker command line in netbea开发者_开发知识库ns with this:
-LC:/tools/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl
But still I cannot compile a simple program! I must be missing something stupid, but I cannot for the life of me figure it out.
errors:
build/Debug/MinGW-Windows/main.o: In function `main': C:\Projects\glade_netbeans3\gtk_tut/main.cpp:24: undefined reference to `gtk_init_abi_check' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:26: undefined reference to `gtk_window_new' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:27: undefined reference to `gtk_window_get_type' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:27: undefined reference to `g_type_check_instance_cast' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:27: undefined reference to `gtk_window_set_position' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:28: undefined reference to `gtk_window_get_type' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:28: undefined reference to `g_type_check_instance_cast' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:28: undefined reference to `gtk_window_set_default_size' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:29: undefined reference to `gtk_window_get_type' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:29: undefined reference to `g_type_check_instance_cast' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:29: undefined reference to `gtk_window_set_title' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:30: undefined reference to `gtk_widget_show' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:33: undefined reference to `gtk_main_quit' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:33: undefined reference to `g_signal_connect_data' C:\Projects\glade_netbeans3\gtk_tut/main.cpp:35: undefined reference to `gtk_mainmake[2]: Leaving directory `/c/Projects/glade_netbeans3/gtk_tut' ' collect2: ld returned 1 exit status make[2]: *** [dist/Debug/MinGW-Windows/gtk_tut.exe] Error 1 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2 make[1]: Leaving directory `/c/Projects/glade_netbeans3/gtk_tut' BUILD FAILED (exit value 2, total time: 1s)
Make file generated by Netbeans:
#
# There exist several targets which are by default empty and which can be
# used for execution of your targets. These targets are usually executed
# before and after some main targets. They are:
#
# .build-pre: called before 'build' target
# .build-post: called after 'build' target
# .clean-pre: called before 'clean' target
# .clean-post: called after 'clean' target
# .clobber-pre: called before 'clobber' target
# .clobber-post: called after 'clobber' target
# .all-pre: called before 'all' target
# .all-post: called after 'all' target
# .help-pre: called before 'help' target
# .help-post: called after 'help' target
#
# Targets beginning with '.' are not intended to be called on their own.
#
# Main targets can be executed directly, and they are:
#
# build build a specific configuration
# clean remove built files from a configuration
# clobber remove all built files
# all build all configurations
# help print help mesage
#
# Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
# .help-impl are implemented in nbproject/makefile-impl.mk.
#
# Available make variables:
#
# CND_BASEDIR base directory for relative paths
# CND_DISTDIR default top distribution directory (build artifacts)
# CND_BUILDDIR default top build directory (object files, ...)
# CONF name of current configuration
# CND_PLATFORM_${CONF} platform name (current configuration)
# CND_ARTIFACT_DIR_${CONF} directory of build artifact (current configuration)
# CND_ARTIFACT_NAME_${CONF} name of build artifact (current configuration)
# CND_ARTIFACT_PATH_${CONF} path to build artifact (current configuration)
# CND_PACKAGE_DIR_${CONF} directory of package (current configuration)
# CND_PACKAGE_NAME_${CONF} name of package (current configuration)
# CND_PACKAGE_PATH_${CONF} path to package (current configuration)
#
# NOCDDL
# Environment
MKDIR=mkdir
CP=cp
CCADMIN=CCadmin
# build
build: .build-post
.build-pre:
# Add your pre 'build' code here...
.build-post: .build-impl
# Add your post 'build' code here...
# clean
clean: .clean-post
.clean-pre:
# Add your pre 'clean' code here...
.clean-post: .clean-impl
# Add your post 'clean' code here...
# clobber
clobber: .clobber-post
.clobber-pre:
# Add your pre 'clobber' code here...
.clobber-post: .clobber-impl
# Add your post 'clobber' code here...
# all
all: .all-post
.all-pre:
# Add your pre 'all' code here...
.all-post: .all-impl
# Add your post 'all' code here...
# build tests
build-tests: .build-tests-post
.build-tests-pre:
# Add your pre 'build-tests' code here...
.build-tests-post: .build-tests-impl
# Add your post 'build-tests' code here...
# run tests
test: .test-post
.test-pre:
# Add your pre 'test' code here...
.test-post: .test-impl
# Add your post 'test' code here...
# help
help: .help-post
.help-pre:
# Add your pre 'help' code here...
.help-post: .help-impl
# Add your post 'help' code here...
# include project implementation makefile
include nbproject/Makefile-impl.mk
# include project make variables
include nbproject/Makefile-variables.mk
Your program compiles, but it does not link. The problem is that, as you have to include all directories for including all headers, you must also indicate the directories for the libraries as well. To summarize: the problem is that netbeans is unable to find the libraries to link.
In your project, go to Properties, Link, and in "Additional Library directories", you will have to mention all directories that include libraries in the Gtkmm distribution.
Hope this helps.
精彩评论