首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用mkbundle编译简单的C#应用程序

无法使用mkbundle编译简单的C#应用程序
EN

Stack Overflow用户
提问于 2010-12-18 04:45:30
回答 3查看 4.5K关注 0票数 7

我写了一些控制台“你好世界”-like应用程序。并关注了c# cywgwin mono mkbundle windows 7 - cannot compile file的答案。但我有:

代码语言:javascript
复制
$ mkbundle -o Fur Furries.exe --deps -z
OS is: Windows
Sources: 1 Auto-dependencies: True
  embedding: C:\Monotest\Furries.exe
  compression ratio: 40.43%
  embedding: C:\Soft\Mono\lib\mono\4.0\mscorlib.dll
  compression ratio: 34.68%
Compiling:
as -o temp.o temp.s
gcc -mno-cygwin -g -o Fur -Wall temp.c `pkg-config --cflags --libs mono-2|dos2un
ix` -lz temp.o
temp.c: In function `main':
temp.c:173: warning: implicit declaration of function `g_utf16_to_utf8'
temp.c:173: warning: assignment makes pointer from integer without a cast
temp.c:188: warning: assignment makes pointer from integer without a cast
/tmp/ccQwnxrF.o: In function `main':
/cygdrive/c/Monotest/temp.c:173: undefined reference to `_g_utf16_to_utf8'
/cygdrive/c/Monotest/temp.c:188: undefined reference to `_g_utf16_to_utf8'
collect2: ld returned 1 exit status
[Fail]

它在Windows XP中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-18 19:16:16

首先,准备好开发环境:

  1. 安装单声道。例如,您已将其安装到"C:\Soft\Mono".
  2. Install Cygwin中。在选择要安装的软件包时,请选择以下命令: gcc-mingw,mingw-zlib,pkg-config,nano。
  3. 启动Cygwin Bash shell (使用链接或"bash --login -i“命令)。
  4. 使用"nano”("nano ~/.bashrc")打开"$HOME/.bashrc“。不要使用不保留行尾的编辑器("CR“、"LF”、"CR/LF“或其他),否则会损坏文件!
  5. 将以下行添加到文件的末尾:

导出PKG_CONFIG_PATH=/cygdrive/c/Soft/Mono/lib/pkgconfig导出PATH=$PATH:/cygdrive/c/Soft/Mono/bin

  • Restart Cygwin Bash shell。

之后,您可以使用“mkbundle”编译您的程序集:

  1. 执行以下命令:"mkbundle -c -o host.c -oo bundle.o --deps YourAssembly.exe <additional arguments>“。您也可以选择性地传递"-z“来压缩结果包。你应该得到"host.c“和"bundle.o”文件。
  2. 在"host.c“中,你应该删除"_WIN32”“分支”(除了"#include <windows.h>“分支)。它不起作用。你只需要在下面的几行后面添加"#undef _WIN32“就可以了:

#ifdef _WIN32 #包括 #endif

所以你会得到:

#ifdef _WIN32 #include #endif #undef _WIN32

  • Perform以下命令:"gcc -mno-cygwin -o ResultantBundle.exe -Wall host.c `pkg-config --cflags --libs mono-2|dos2unix` bundle.o <additional arguments>“。如果您在步骤2中添加了-z附加参数,则必须在此步骤中添加-lz附加参数。

  • 您将得到"ResultantBundle.exe“。这是您的Mono应用程序,因为独立的executable.

  • It仍然需要" Mono -2.0.dll“和一些额外的DLL-s以及您在开发期间依赖的一些资源(例如,它可能需要GTK#原生DLL-s),但它不需要完整的Mono运行时才能运行。
票数 13
EN

Stack Overflow用户

发布于 2011-09-06 23:18:41

我只想补充一点,如果你把-z传递给mkbundle,那么你需要把-lz传递给gcc。我在使用winforms和网络访问的应用程序正常工作时遇到了一些问题,我不得不将machine.config从C:\Mono\etc\mono\4.0\machine.config复制到我的应用程序所在的位置。然后,我将--machine-config machine.config传递给mkbundle。

所有这些步骤都非常令人困惑和沮丧,为什么不像输入mkbundle --deps app.exe那样简单呢?我尝试更改mkbundle使用的模板,并自己编译它,但它不能运行。我现在已经下载了mono源代码,并尝试构建整个东西,但我怀疑它是否能正常工作。如果有人能解释一下mkbundle到底是怎么回事,让这件事变得如此烦人,我很有兴趣做出贡献。

票数 1
EN

Stack Overflow用户

发布于 2015-01-23 11:51:42

有了temp.o和temp.c之后,您可以将它们添加到visual c++中,以使用其他资源创建windows应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4474613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档