简体   繁体   English

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

[英]Why can I not compile GTK+ using MinGW?

Help me Stackoverflow! 帮我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 我通过以下命令生成了包含目录的列表:pkg-config --cflags gtk + -2.0

Then I added the include files in the C++ compiler settings in netbeans... 然后我在netbeans的C ++编译器设置中添加了包含文件...

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 然后我从此命令生成了一个lib列表:pkg-config --libs gtk + -2.0

Then added my libs to the linker command line in netbeans with this: 然后使用以下命令将我的库添加到netbeans的链接器命令行中:

-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: 使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. 总结一下:问题在于netbeans无法找到要链接的库。

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. 在您的项目中,转到“属性”,“链接”,然后在“其他库目录”中,必须提及Gtkmm发行版中所有包含库的目录。

Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM