gpt4 book ai didi

c# - 在 Windows 上使用 mkbundle 创建 C# 可执行文件

转载 作者:太空狗 更新时间:2023-10-29 23:23:08 24 4
gpt4 key购买 nike

我正在尝试从控制台应用程序创建可执行文件。我已经安装了 mono、cygwin(mingw-gcc、mingw-zlib1、mingw-zlib-devel、pkg-config)并且我已经将以下行添加到我的 .bashrc 文件中

export PKG_CONFIG_PATH=/cygdrive/c/progra~1/Mono-3.2.3/lib/pkgconfig
export PATH=$PATH:/cygdrive/c/progra~1/Mono-3.2.3/bin
export CC="i686-pc-mingw32-gcc -U _WIN32"

但每次我尝试使用 mkbundle 时,我都会收到以下消息 enter image description here

有没有办法让 mkbundle 在 windows 上正常工作?

(我使用的是windows 7 x86,mono 3.2.3,我在官网上找到的cygwin,xamarin studio 4.2和net framwork 4)

最佳答案

这个问题在目前Windows下的mono版本中依然存在。发生这种情况是因为 mono 团队将默认 GC 切换为 SGEN。因此,当您尝试使用 mkbundle 时,正如您在错误 mkbundle 实用程序中看到的那样,尝试查找 mono-2 库,但此库未包含在安装程序中,因此您失败了。要解决这个问题,您应该将 mkbundle 配置为使用 libmonosgen-2.0 而不是 mono-2。让我们尝试这样做。

关键时刻是设置这个变量:

export PKG_CONFIG_PATH=/cygdrive/c/progra~1/Mono-3.2.3/lib/pkgconfig

如果你去这个目录你会看到很多*.pc文件(package config)。该文件负责在捆绑过程中配置链接库。由于某些原因,mono 团队将包配置文件和库硬编码到 mono-2(参见 this 第 492 行)。我们如何在不重建 mkbundle 的情况下修复它?解决方案是使用下一个捆绑脚本:

# Mono paths
mono_version="3.2.3"
export MONO=/cygdrive/c/progra~2/Mono-$mono_version
machineconfig=$PROGRAMFILES\\Mono-$mono_version\\etc\\mono\\4.5\\machine.config
export PATH=$PATH:$MONO/bin
export PKG_CONFIG_PATH=$MONO/lib/pkgconfig
# Compiller
export CC="i686-pc-mingw32-gcc -U _WIN32"
# Output file name
output_name=Prog.exe
# Produce stub only, do not compile
mkbundle --deps --machine-config "$machineconfig" -c Program.exe
# Produce helper object file. You may see errors at this step but it's a side effect of this method.
mkbundle --deps --machine-config "$machineconfig" -oo temp.o Program.exe
# Compile. Pay attention where I use monosgen-2
i686-pc-mingw32-gcc -U _WIN32 -g -o "$output_name" -Wall temp.c `pkg-config --cflags --libs monosgen-2` temp.o
# Copy libmonosgen-2.dll
cp $MONO/bin/libmonosgen-2.0.dll .
# Run
./$output_name

关于c# - 在 Windows 上使用 mkbundle 创建 C# 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20207965/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com