首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mono mkbundle瞄准SGEN垃圾收集器

使用Mono mkbundle瞄准SGEN垃圾收集器
EN

Stack Overflow用户
提问于 2013-06-28 08:49:17
回答 2查看 634关注 0票数 1

可以使用使用sgen GC的mkbundle来捆绑Mono可执行文件吗?

我假设因为生成的包需要libmono-2.0.so.1而不是libmonosgen-2.0,所以它使用标准的boehm。我已经尝试使用$MONO_OPTIONS=--gc=sgen,但是生成的包仍然需要非sgen库。

我是不是误解了libmono和libmonsgen库的用法?

感谢您的帮助或指导

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-28 17:23:57

这有点棘手,因为Mono实际上有两个单独的可执行文件和两个单独的库,每个垃圾收集器一个。例如,如果你运行mono --gc=sgen ...,那么mono实际上会执行mono-sgen ...execvp()来切换到不同的可执行文件。

类似地,mkbundle将使用pkg-config选择库并链接一个或另一个库(即,无论哪个是系统默认值)。要获取另一个库,有两个选项:

一种是使用默认的sgen重新构建Mono。显然,这可能不是一个可行的解决方案。

另一种方法是使用pkg-config覆盖选择。您将创建mono-2.pc的副本,将-lmono-2.0替换为-lmonosgen-2.0,更新prefixexec_prefix,并使用PKG_CONFIG_PATH环境变量选择该版本。

请注意,我实际上从未尝试过后者,但它没有理由不工作,因为mkbundle是从pkg-config获得库路径的。

票数 1
EN

Stack Overflow用户

发布于 2015-04-12 12:41:52

感谢你的这个问题,因为它帮助我确定为什么我的一个应用程序在与mkbundle捆绑后运行得太慢。这是因为使用了Boehm引擎。

要包含SGen,只需使用--keeptemp标志调用mkbundle,然后重写编译器命令(由mkbundle打印)以包含monosgen-2而不是mono-2。

示例:(在Mac上,但在Linux上可以很容易地重写)

代码语言:javascript
复制
export PATH=/Library/Frameworks/Mono.framework/Commands/:$PATH
export AS="as -arch i386"
export CC="cc -arch i386 -framework CoreFoundation -lobjc -liconv"

mkbundle TestApp.exe --deps --static -o TestAppBundleName --keeptemp

cc -arch i386 -framework CoreFoundation -lobjc -liconv -o TestAppBundleName -Wall `pkg-config --cflags monosgen-2` temp.c  `pkg-config --libs-only-L monosgen-2` `pkg-config --variable=libdir monosgen-2`/libmonosgen-2.0.a `pkg-config --libs-only-l monosgen-2 | sed -e "s/\-lmonosgen-2.0 //"` temp.o
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17355540

复制
相关文章

相似问题

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