C++ 为什么我不能编译GTK+;使用MinGW?

C++ 为什么我不能编译GTK+;使用MinGW?,c++,netbeans,windows-7,mingw,gtk,C++,Netbeans,Windows 7,Mingw,Gtk,帮帮我 所以,我觉得我已经正确地设置了我的环境,但我无法构建我的程序 #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

帮帮我

所以,我觉得我已经正确地设置了我的环境,但我无法构建我的程序

#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);
}
生成由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

您的程序可以编译,但不链接。问题是,由于必须包含所有目录才能包含所有标题,因此还必须指明库的目录。总而言之:问题在于netbeans无法找到要链接的库

在您的项目中,转到属性、链接,在“附加库目录”中,您必须提到Gtkmm发行版中包含库的所有目录


希望这能有所帮助。

您的程序可以编译,但无法链接。问题是,由于必须包含所有目录才能包含所有标题,因此还必须指明库的目录。总而言之:问题在于netbeans无法找到要链接的库

在您的项目中,转到属性、链接,在“附加库目录”中,您必须提到Gtkmm发行版中包含库的所有目录


希望这有帮助。

Netbeans不是编译器。你在用什么编译器?嗯。。我们能够从输出中找出答案。作为将来的参考,您的编译器是MinGW,而不是Netbeans。是的,我知道,我遗漏了这一点。。。很抱歉如果里面没有什么秘密,也许你可以粘贴/上传你的makefile?将netbeans生成的makefile添加到原始帖子中!Netbeans不是编译器。你在用什么编译器?嗯。。我们能够从输出中找出答案。作为将来的参考,您的编译器是MinGW,而不是Netbeans。是的,我知道,我遗漏了这一点。。。很抱歉如果里面没有什么秘密,也许你可以粘贴/上传你的makefile?将netbeans生成的makefile添加到原始帖子中!好吧,我要做的是。。。将所有头文件添加到C++中“附加包括Dir”。然后在链接器设置中,将其放入“附加命令行”-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-lpangoairo-1.0-lpango-1.0-lcairo-lgobject-2.0-lgmodule-2.0-lintlhe lib目录被添加到“附加库目录”在链接器中以及在路径中。所以,我不明白为什么它不能链接?我还将所有头文件的dir'添加到链接器的附加lib目录中,但运气不好!好的,我把它转到link。。。不应该将它们添加到命令行,但是libs设置。。。我就知道那会是件愚蠢的事!好吧,我要做的是。。。将所有头文件添加到C++中“附加包括Dir”。然后在链接器设置中,将其放入“附加命令行”-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-lpangoairo-1.0-lpango-1.0-lcairo-lgobject-2.0-lgmodule-2.0-lintlhe lib目录被添加到“附加库目录”在链接器中以及在路径中。所以,我不明白为什么它不能链接?我还将所有头文件的dir'添加到链接器的附加lib目录中,但运气不好!好的,我把它转到link。。。不应该将它们添加到命令行,但是libs设置。。。我就知道那会是件愚蠢的事! 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)
#
#  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