使用 cygwin 在 c 中编译 GTK-app:无效参数
Posted
技术标签:
【中文标题】使用 cygwin 在 c 中编译 GTK-app:无效参数【英文标题】:Compiling GTK-app in c with cygwin: invalid argument 【发布时间】:2014-05-29 13:34:28 【问题描述】:我认为安装后一切正常
MinGW
gtk3
gtkmm
cygWin
而且我编译普通的简单文件也没有问题。我对诸如
之类的命令也没有问题 $ pkg-config --cflags --libs gtk+-2.0
输出
-mms-bitfields -IC:/gtkmm/include/gtk-2.0 -IC:/gtkmm/lib/gtk-2.0/include
- IC:/gtkmm/include/atk-1.0 -IC:/gtkmm/include/cairo -IC:/gtkmm/include/gdk-pixbuf
-2.0 - IC:/gtkmm/include/pango-1.0 -IC:/gtkmm/include/glib-2.0 -IC:/gtkmm/lib/glib
-2.0/include -IC:/gtkmm/include -IC:/gtkmm/include/freetype2
-IC:/gtkmm/include/libpng14 -LC:/gtkmm/lib -Lc:/devel/dist/win32/libpng-1.4.3-1/lib
-lgtk-win32-2.0 -lgdk-win32-2.0 - latk-1.0 -lgio-2.0 -lpangowin32-1.0 -lgdi32
-lpangocairo-1.0 -lgdk_pixbuf-2.0 -lpng14 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule
-2.0 -lgthread-2.0 -lglib-2.0 -lintl
但是当我尝试从教程中编译一个简单的 gtk-app 时
$ gcc c_gui.c -o c_gui `pkg-config --cflags --libs gtk+-2.0`
我从 cygwin 终端窗口收到一个错误:
:gcc.exe: error: -LC:/gtkmm/lib: Invalid argument
可能出了什么问题?
【问题讨论】:
您可能向gcc
传递了一个无效的命令行参数?你看谷歌的结果了吗 - google.com/search?q=%22Invalid%20argument%22%20gcc
【参考方案1】:
您的 pkgconfig 似乎有问题。它不应该返回 DOS 风格的路径。如果我在上面运行您的确切命令,我会得到:
-D_REENTRANT -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/libpng15 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/harfbuzz -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lpangocairo-1.0 -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lgdk_pixbuf-2.0 -lpangoft2-1.0 -lgio-2.0 -lcairo -lpixman-1 -lGL -lpthread -lxcb-shm -lxcb-render -lXrender -lXext -lXdamage -lX11-xcb -lxcb-glx -lXfixes -lX11 -lxcb -lXau -lXdmcp -lharfbuzz -lpango-1.0 -lfontconfig -lgmodule-2.0 -lgobject-2.0 -lffi -lglib-2.0 -lintl -liconv -lpcre -lexpat -lfreetype -lbz2 -lpng15 -lm -lz
我怀疑这是因为您试图混合使用 MinGW 和 Cygwin。它们并不总是能很好地协同工作。
我的 /usr/lib/pkgconfig/gtk+-2.0.pc 看起来像这样:
prefix=/usr
exec_prefix=/usr
libdir=/usr/lib
includedir=$prefix/include
target=x11
gtk_binary_version=2.10.0
gtk_host=x86_64-unknown-cygwin
Name: GTK+
Description: GTK+ Graphical UI Library ($target target)
Version: 2.24.23
Requires: gdk-$target-2.0 atk cairo gdk-pixbuf-2.0 gio-2.0 pangoft2
Libs: -L$libdir -lgtk-$target-2.0
Cflags: -I$includedir/gtk-2.0
我觉得这很合理。
【讨论】:
以上是关于使用 cygwin 在 c 中编译 GTK-app:无效参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在Eclipse中如何用cygwin把C文件编译成so文件
使用gcc -std = c ++ 11时,为什么Cygwin中的某些系统函数未定义?