【问题标题】:Coding a simple GTK GUI on windows in C with eclipse使用 Eclipse 在 C 中的 Windows 上编写一个简单的 GTK GUI
【发布时间】:2016-07-20 13:43:14
【问题描述】:

我的问题似乎很简单:我希望能够为 C 中的 Windows(如果可能的话,在 Windows 上)创建一个带有简单 GUI 的简单程序。 我当前的环境是 eclipse IDE,msys2 和 mingw64 工具链都在 windows 10 上。 我想将 pkg-config 与 eclipse 一起使用,以避免“硬编码”我所有的库,为此我首先尝试了 eclipse 的 pkg-config 插件(当我创建新项目时它崩溃,空指针异常)。然后我尝试在对 GCC 的调用中插入 pkg-config 命令。为此,我不得不使用 powershell,因为 cmd 不允许它。 但即使在 powershell 上,我也无法使用它,因为 pkg-config 返回给我的字符串被 gcc 视为命令。 下面是eclipse用来编译的:

powershell gcc -O0 -g3 -Wall -c -fmessage-length=0 --std=c99 $(pkg-config-win --cflags --libs gtk+-3.0) -o main.o "..\\main.c"

这就是它给我的回报:

gcc.exe: error: unrecognized command line option '-mms-bitfields -pthread -mms-bitfields -IC:/msys64/mingw64/include/gtk-3.0 [...]'

然后我尝试删除 pkg-config 的 --cflags: eclipse使用的命令:

powershell gcc $(pkg-config-win --libs gtk+-3.0) -o Test.exe main.o -lgtk-3 -lgdk-3 -lgdi32 -limm32 -lshell32 -lole32 -lwinmm -ldwmapi -lz -lpangowin32-1.0 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lintl 

这是结果(同一行的 8 倍)。

gcc.exe: error: .0: No such file or directory

我尝试了几十种不同的方法,但都没有奏效。

所以我的主要问题是:

  1. 有解决这个问题的简单方法吗?
  2. 我做的事情是否正确(Eclipse 是否能够做这些事情?)
  3. 如果没有,我该怎么办? (更改 IDE?更改 GUI 库,...)

我希望你能帮助我,我对你可能提供的可能性持开放态度。如果我在某些方面不清楚或没有提供足够的信息,请原谅,我会尽快回复您的问题:p

【问题讨论】:

  • 听起来好像有什么东西导致整个pkg-config 输出被视为一个长参数,而不是多个以空格分隔的参数。我不确定有什么修复方法...... Eclipse 中有什么东西?
  • 不知道是不是真的和eclipse有关。这是在 powershell 中输入的命令: gcc -O0 -g3 -Wall -c -fmessage-length=0 --std=c99 $(p .o "..\\main.c" 结果如下: gcc。 exe: error: unrecognized command line option '-mms-bitfields -pthread [...]' 所以看来 Eclipse 将命令传递到控制台并收回其答案以显示。
  • 那么这是 PowerShell 问题吗? PowerShell 是否将 $(...) 的替换视为单个参数?
  • 你会如何检查这样的事情?
  • 您可以编写一个简单的 C 程序,它只在标准输出上打印参数,每行一个,然后在 PowerShell 中构建并像test.exe $(echo hello world) 一样运行它。如果输出是 helloworld 在不同的行上,或者如果 PowerShell 抱怨语法无效,那么 PowerShell 没有这样做;如果输出是 hello world 在一行上,那么它是 PowerShell 做的,并且需要不同的语法。

标签: c eclipse windows gtk pkg-config


【解决方案1】:
So my main questions are:
  1.Is there a simple way to solve this problem?

是的,

虽然这是一个老问题,但值得回答。 cmets 中正确指出的问题是$(pkg-config-win --cflags --libs gtk+-3.0) 的输出作为一个长字符串返回,而gcc 无法识别它。要解决这个问题,您可以简单地将pkg-config 的输出分配为一个数组,并将数组变量与gcc 一起使用,例如

PS> [string[]] $cflags = $(pkg-config-win --cflags --libs gtk+-3.0)
PS> gcc -O0 -g3 -Wall -c -fmessage-length=0 --std=c99 $cflags -o main.o ..\main.c

gcc 将看到 $cflags 中包含的每个选项作为单独的参数(自动处理引用,因此嵌入的 '-''.' 不会在 powershell 中引起问题)

【讨论】:

    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 2015-04-14
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 2018-07-04
    • 1970-01-01
    相关资源
    最近更新 更多