Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编译gtk+&;Vista中的gtkmm在cmd提示符下_C_Windows_Gtk - Fatal编程技术网

编译gtk+&;Vista中的gtkmm在cmd提示符下

编译gtk+&;Vista中的gtkmm在cmd提示符下,c,windows,gtk,C,Windows,Gtk,有人能在Vista cmd提示符下帮我编译gtk+(>kmm)吗? 我最近试过了,但没能成功。我觉得我所有的依赖项和路径都是正确的,但我显然没有或遗漏了一些东西!我已经在互联网上搜索过了,但还没有找到具体的帮助(我也尝试在cygwin中编译,但已经成功地在MSYS中编译并运行了简单的helloworld gtk+示例) 我已经通过MinGW&Gtk+Win32-dev(Glade)和Gtkmm-Win32安装了gcc。下面是一些示例cmd提示符输出,以显示我遇到的问题: D:\RPD_Pro

有人能在Vista cmd提示符下帮我编译gtk+(>kmm)吗? 我最近试过了,但没能成功。我觉得我所有的依赖项和路径都是正确的,但我显然没有或遗漏了一些东西!我已经在互联网上搜索过了,但还没有找到具体的帮助(我也尝试在cygwin中编译,但已经成功地在MSYS中编译并运行了简单的helloworld gtk+示例)

我已经通过MinGW&Gtk+Win32-dev(Glade)和Gtkmm-Win32安装了gcc。下面是一些示例cmd提示符输出,以显示我遇到的问题:

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>gcc helloworld.c -o hellowo
rld
helloworld.c:1:21: gtk/gtk.h: No such file or directory
helloworld.c:5: error: syntax error before '*' token
helloworld.c:11: error: syntax error before "delete_event"
helloworld.c:11: error: syntax error before '*' token
helloworld.c: In function `delete_event':
helloworld.c:26: error: `TRUE' undeclared (first use in this function)
helloworld.c:26: error: (Each undeclared identifier is reported only once
helloworld.c:26: error: for each function it appears in.)
helloworld.c: At top level:
helloworld.c:30: error: syntax error before '*' token
helloworld.c: In function `main':
helloworld.c:40: error: `GtkWidget' undeclared (first use in this function)
helloworld.c:40: error: `window' undeclared (first use in this function)
helloworld.c:41: error: `button' undeclared (first use in this function)
helloworld.c:48: error: `GTK_WINDOW_TOPLEVEL' undeclared (first use in this func
tion)
helloworld.c:56: error: `NULL' undeclared (first use in this function)
helloworld.c:80: error: `gtk_widget_destroy' undeclared (first use in this funct
ion)

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>gcc helloworld.c -o hellowo
rld pkg-config --cflags --libs gtk+-2.0
gcc: pkg-config: No such file or directory
gcc: gtk+-2.0: No such file or directory
cc1.exe: error: unrecognized command line option "-fcflags"
cc1.exe: error: unrecognized command line option "-flibs"

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>gcc --v
Reading specs from C:/MinGW/bin/../lib/gcc/mingw32/3.4.5/specs
Configured with: ../gcc-3.4.5-20060117-3/configure --with-gcc --with-gnu-ld --wi
th-gnu-as --host=mingw32 --target=mingw32 --prefix=/mingw --enable-threads --dis
able-nls --enable-languages=c,c++,f77,ada,objc,java --disable-win32-registry --d
isable-shared --enable-sjlj-exceptions --enable-libgcj --disable-java-awt --with
out-x --enable-java-gc=boehm --disable-libgcj-debug --enable-interpreter --enabl
e-hash-synchronization --enable-libstdcxx-debug
Thread model: win32
gcc version 3.4.5 (mingw-vista special r3)

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>pkg-config --version
0.23

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>which pkg-config
/cygdrive/c/Gtk+/bin/pkg-config

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld> echo %PKG_CONFIG_PATH%
C:\Gtk+\lib\pkgconfig
pkg配置安装是否正常?我是否使用了正确的编译命令语法? 我是否可以使用MS vis C express编译器(或任何MSWindows7 SDK编译器,因为我也安装了它?!)。我只是一个初学者/业余程序员,但我确实想为GUI编程编写gtk+/gtkmm代码,并希望能够在cmd提示符下编译,以及使用IDE进行编码和编译/运行


我非常感谢并期待得到有帮助的回复,非常感谢

我强烈推荐CMake完成这项任务。是的,我知道这不是你要求的,但你甚至没有使用makefile。虽然我确信可以一起破解一些命令来让它工作,但这是不实际的。CMake内置了一些模块,用于在您需要的windows上生成makefiles和查找gtkmm库。它甚至可以生成MSVC项目或mingw/msys生成文件
这就是说,如果您坚持这样做,请在gtkmm.pc文件上使用--cflags运行pkg config,并将输出复制粘贴到.bat文件中。我不知道还有什么方法可以将pkg配置嵌入到windows命令行中。(事实上,我曾经这样做过一次,成功了)
但说真的,cmake是为了解决这个问题而设计的,它是自由和开放源码软件

D:\RPD_Programming\RPD_HelloWorld\RPD_Gtk_helloworld>gcc helloworld.c -o hellowo
rld pkg-config --cflags --libs gtk+-2.0
  • 您需要将pkg config的输出作为命令的一部分,如下所示:

    gcc helloworld.c -o helloworld.exe `pkg-config --cflags --libs gtk+-2.0` 
    
    另外,请确保已正确安装并配置了pkg config

  • helloworld.c:1:21:gtk/gtk.h:没有这样的文件或目录

    这表明在库路径中没有GTK头


  • 我在这个互联网论坛上找到了另一个解决方案:

    为pkg config--cflags&pkg config--libs gtk+-2.0生成这些环境变量,并将它们组合到一个新的环境变量%gtk_COMPILE%中,并将其包含在Vista cmd shell的命令行中,这样做很有效,编译完成并且.exe gui窗口helloworld运行

    我仍然不知道为什么我的pkg版本来自MinGW目录和pkg配置 路径为C:\Gtk+\lib\pkgconfig


    这仍然不是我所期望的答案,我仍然觉得应该有另一种(更好/合适的)方法在Vista和gtk+的cmd提示符下完全使用pkg config,以获得成功的编译和运行。也许有一天我会明白这一点

    从cmd.exe使用pkg config确实很痛苦,因为使用它的“正常”方式是在Unix样式的shell中使用反引号或反勾号(“thingies,ASCII backquote,不要称它们为“反斜杠”)。如果坚持只使用cmd.exe,则需要执行一些cmd.exe杂技,以将pkg config的输出输入到命令行中。或者只需手动运行pkg config,并将其输出复制/粘贴到执行生成的.bat文件中

    无论如何,需要记住的一件重要事情是,当您看到同时使用--cflags和--libs选项运行pkg config时(正如上面LiraNuna的回答中所述),这通常在Windows上不起作用

    gcc(以及cl)的参数顺序很重要。库应该跟踪引用它们的对象(或源)文件

    (由于Linux和其他基于ELF的系统上的可执行文件可能包含未定义的符号,所以通常会随机执行此操作。)

    因此,如果在env var foo_cflags中有pkg config--cflags foo的输出,在env var foo_libs中有pkg config--libs foo的输出,那么运行gcc的正确方法是

    gcc %CFLAGS% -o myprog.exe %FOO_CFLAGS% myprog.c %FOO_LIBS% %LIBS%
    

    其中CFLAGS是您想要使用的任何其他编译器标志,LIBS是您需要的任何其他库。当然,根据需要添加更多的源文件或对象文件。

    我已经提交了一个相关的解决方案(针对Windows上的Eclipse)


    这很费劲,但很管用

    我试图在Vista md提示符下编译,Windows无法识别反斜杠(据我所知,即使路径中有CoreUtils和GnuWin32,我也不认为这会起作用)。我在配置pkg config时遇到问题。当我在cmd提示符下用哪个版本检查时,我得到了MinGW\lib\pkgconfig,但我的echo%PKG\u CONFIG\u PATH%给出了C:\Gtk+\lib\pkgconfig?同样,我的LIB&include路径中有C:\Gtk+\include&C:\Gtk+\include\Gtk-2.0\Gtk,所以头应该在路径中?不管怎么说,这让我很困惑,谢谢你的回复。我没有使用makefile,因为我只想编译一个简单的gtk+helloworld gui示例,只有一个简单的文件。这是给我一个巨大的斗争(在Vista和cygwin)!我肯定有一个健全的编译命令来做这件事,但我不知道它是什么!我肯定会考虑使用Cmake,并尝试使用.bat文件替代方案(如果我不得不求助于这种方法,我将不得不使用IDE ie DevC或其他工具)。非常感谢你的回复