Gcc 从Linux for Windows编译Vala
我通常只编写高级代码,所以我根本没有编译代码的经验(就像IDE通常为我做的那样),所以我可能忽略了一些非常明显的事情。 我花了很多时间研究如何在Linux中编译Vala,但我似乎无法做到这一点 以下是我采取的步骤:Gcc 从Linux for Windows编译Vala,gcc,vala,mingw-w64,Gcc,Vala,Mingw W64,我通常只编写高级代码,所以我根本没有编译代码的经验(就像IDE通常为我做的那样),所以我可能忽略了一些非常明显的事情。 我花了很多时间研究如何在Linux中编译Vala,但我似乎无法做到这一点 以下是我采取的步骤: 我安装了valac、gtk、mingw64(我构建了一个docker映像以确保:0620731/valac:mingw64) 从展示gtk3的gnome教程中复制了一些可用的vala代码 运行以下命令:valac--cc=x86_64-w64-mingw32-gcc-win32--p
In file included from /usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h:9:0,
from /usr/include/glib-2.0/glib/gtypes.h:32,
from /usr/include/glib-2.0/glib/galloca.h:32,
from /usr/include/glib-2.0/glib.h:30,
from /home/developer/vala/Documents/Projects/gamedev/vala-test/bin/main.vala.c:6:
/usr/include/glib-2.0/glib/gtypes.h: In function '_GLIB_CHECKED_ADD_U64':
/usr/include/glib-2.0/glib/gmacros.h:241:53: error: size of array '_GStaticAssertCompileTimeAssertion_0' is negative
#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
^
/usr/include/glib-2.0/glib/gmacros.h:238:47: note: in definition of macro 'G_PASTE_ARGS'
#define G_PASTE_ARGS(identifier1,identifier2) identifier1 ## identifier2
^~~~~~~~~~~
/usr/include/glib-2.0/glib/gmacros.h:241:44: note: in expansion of macro 'G_PASTE'
#define G_STATIC_ASSERT(expr) typedef char G_PASTE (_GStaticAssertCompileTimeAssertion_, __COUNTER__)[(expr) ? 1 : -1] G_GNUC_UNUSED
^~~~~~~
/usr/include/glib-2.0/glib/gtypes.h:423:3: note: in expansion of macro 'G_STATIC_ASSERT'
G_STATIC_ASSERT(sizeof (unsigned long long) == sizeof (guint64));
^~~~~~~~~~~~~~~
In file included from /usr/include/glib-2.0/gio/gio.h:46:0,
from /usr/include/gtk-3.0/gdk/gdkapplaunchcontext.h:28,
from /usr/include/gtk-3.0/gdk/gdk.h:32,
from /usr/include/gtk-3.0/gtk/gtk.h:30,
from /home/developer/vala/Documents/Projects/gamedev/vala-test/bin/main.vala.c:10:
/usr/include/glib-2.0/gio/gcredentials.h: At top level:
/usr/include/glib-2.0/gio/gcredentials.h:75:1: error: unknown type name 'uid_t'
uid_t g_credentials_get_unix_user (GCredentials *credentials,
^~~~~
/usr/include/glib-2.0/gio/gcredentials.h:79:52: error: unknown type name 'uid_t'; did you mean 'pid_t'?
uid_t uid,
^~~~~
pid_t
error: cc exited with status 256
Compilation failed: 1 error(s), 0 warning(s)
我也试过编译c文件,但是我得到了完全相同的结果,所以它不是一个有缺陷的版本
虽然我设法在Windows上编译了相同的项目,所以并不是所有的都丢失了,但是我真的希望能够在没有双启动/VM的情况下完成这项工作。
我已经很接近了,我现在不想放弃
这可能有用(main.vala):
这是所用库的一个问题
/usr/lib/x86_64-linux-gnu/
和/usr/include/
是本机库的路径。pkg-config
工具会为您解决这个问题。因此,在调用valac
时,也要传递右侧的pkg config
:
valac --cc x86_64-w64-mingw32-gcc-win32 \
--pkg-config x86_64-w64-mingw32-pkg-config \
--pkg gtk+-3.0 \
-X -mwindows \
../main.vala
下一步是确保在Linux机器上安装了交叉编译库。这取决于您使用的Linux发行版,例如,您可能需要安装Fedora:
dnf install mingw64-gtk3 mingw64-glib2
最后,为了便于分发,您可能需要尝试静态链接,以便将所有内容集中到一个大二进制文件中。在Fedora中有一个glib2 static包,但问题是GTK3似乎没有静态版本。否则,请查看一些有关需要打包的动态库的提示
不幸的是,这些都没有经过测试-我没有Windows来尝试。如果有一个工作过程,可以交叉编译Vala应用程序以在Windows上运行,那就太好了。感谢您为此付出的努力,如果您能让它正常工作,那将非常有用。欢迎访问Stackoverflow.com!请让你的问题成为一个最小的、完整的、可验证的例子,并检查你的帖子是否可以回答。那么我做错了什么?我看了两份文件,但没有看到。是不是太技术化了?我想,“假装你在和一个忙碌的同事说话”这句话可以概括这一切,但我会这样说:/代码在哪里?只发布了错误跟踪。如果可能,它应该是可复制的,以便其他人可以帮助!我没有注意到这真管用!我并没有立即让它在ubuntu上运行,但我想:“嘿,它是docker!让我们把我的图像改成fedora吧”,所以我只是复制粘贴了你的答案,它就工作了。它甚至比在Windows上编译的二进制文件更小。我一定会看看静态链接。
dnf install mingw64-gtk3 mingw64-glib2