[Mono-osx] Bundled mono console application on OS X throwing gthread errors.

silver83 silver83 at gmail.com
Fri Nov 14 14:46:37 EST 2008


That was it. Thanks.


Geoff Norton-2 wrote:
> 
> This error generally means you are somehow bringing two different
> versions of glib into your project.
> 
> -g
> 
> On Wed, 2008-11-12 at 11:29 -0800, silver83 wrote:
>> I can't expose the source code but I'll try to recreate the exception
>> using
>> some sample code and post it here later.
>> 
>> I have a mono console application (exe), that has assembly references to
>> several manages dll's and exe's.
>> Let's say the application directory looks like this :
>> AppDir/App.exe
>> AppDir/App.exe.config
>> AppDir/RefAssembly.dll
>> AppDir/Native/nativeLib1.dylib
>> 
>> Steps : 
>> 1. Run "mkbundle2 -o App App.exe RefAssembly.dll". 
>> 2. Run "macpack -a App.exe -m console -n BundledApp.app"
>> 3. Move App (the result of mkbundle) and the Native folder 
>>     to "BundledApp.app/Contents/Resources"
>> 4. Replace BundledApp.app/Contents/MacOS/BundledApp" with a bash script
>> that
>> actually executes 
>>     "BundledApp.app/Contents/App"
>> 
>> 5. Use otool -L on "BundledApp.app/Contents/App", find library
>> references.
>> 6. For each library reference 
>> 6.1. copy it to "BundledApp.app/Contents/Libraries/". 
>> 6.2. use install_name_tool to change the reference to
>> "@executable_path/../Libraries/libname". 
>> 6.3. use install_name_tool to change the install name of the library
>> itself
>> to same.
>> 6.4. for this library reference, perform step 6 recursively on it (find
>> it's
>> references, etc...)
>> 
>> Step 6 is a c# application which excludes everything non-mono, similar to
>> the one found here : 
>> http://code.google.com/p/cocoa-sharp-dev/wiki/RedistributableAppWithoutInstallingMono
>> 
>> This leaves me with the following directory structure :
>> BundledApp.app/Contents/Resources/App
>> BundledApp.app/Contents/Resources/Native/nativeLib1.dylib
>> BundledApp.app/Contents/Libraries/libglib-2.0.0.1800.1.dylib
>> BundledApp.app/Contents/Libraries/	libgthread-2.0.0.1800.1.dylib	
>> BundledApp.app/Contents/Libraries/libmono.0.0.0.dylib
>> BundledApp.app/Contents/Libraries/libglib-2.0.0.dylib
>> BundledApp.app/Contents/Libraries/libintl.8.0.2.dylib
>> 
>> Here is the tool -L result of all of them now :
>> 
>> ./libglib-2.0.0.1800.1.dylib:
>> 	@executable_path/../Libraries/libglib-2.0.0.1800.1.dylib (compatibility
>> version 1801.0.0, current version 1801.1.0)
>> 	/usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version
>> 5.0.0)
>> 	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
>> 88.3.10)
>> 	@executable_path/../Libraries/libintl.8.0.2.dylib (compatibility version
>> 9.0.0, current version 9.2.0)
>> 	/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
>> (compatibility version 2.0.0, current version 128.0.0)
>> 	/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version
>> 1.0.0)
>> ./libglib-2.0.0.dylib:
>> 	@executable_path/../Libraries/libglib-2.0.0.dylib (compatibility version
>> 1801.0.0, current version 1801.1.0)
>> 	/usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version
>> 5.0.0)
>> 	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
>> 88.3.10)
>> 	@executable_path/../Libraries/libintl.8.0.2.dylib (compatibility version
>> 9.0.0, current version 9.2.0)
>> 	/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
>> (compatibility version 2.0.0, current version 128.0.0)
>> 	/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version
>> 1.0.0)
>> ./libgthread-2.0.0.1800.1.dylib:
>> 	@executable_path/../Libraries/libgthread-2.0.0.1800.1.dylib
>> (compatibility
>> version 1801.0.0, current version 1801.1.0)
>> 	@executable_path/../Libraries/libglib-2.0.0.dylib (compatibility version
>> 1801.0.0, current version 1801.1.0)
>> 	/usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version
>> 5.0.0)
>> 	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
>> 88.3.10)
>> 	@executable_path/../Libraries/libintl.8.0.2.dylib (compatibility version
>> 9.0.0, current version 9.2.0)
>> 	/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon
>> (compatibility version 2.0.0, current version 128.0.0)
>> 	/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version
>> 1.0.0)
>> ./libintl.8.0.2.dylib:
>> 	@executable_path/../Libraries/libintl.8.0.2.dylib (compatibility version
>> 9.0.0, current version 9.2.0)
>> 	/usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version
>> 5.0.0)
>> 	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
>> 88.3.10)
>> 
>> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
>> (compatibility version 150.0.0, current version 368.35.0)
>> 	/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version
>> 1.0.0)
>> ./libmono.0.0.0.dylib:
>> 	@executable_path/../Libraries/libmono.0.0.0.dylib (compatibility version
>> 1.0.0, current version 1.0.0)
>> 	@executable_path/../Libraries/libgthread-2.0.0.1800.1.dylib
>> (compatibility
>> version 1801.0.0, current version 1801.1.0)
>> 	/usr/lib/libiconv.2.dylib (compatibility version 5.0.0, current version
>> 5.0.0)
>> 	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
>> 88.3.10)
>> 	@executable_path/../Libraries/libglib-2.0.0.1800.1.dylib (compatibility
>> version 1801.0.0, current version 1801.1.0)
>> 	@executable_path/../Libraries/libintl.8.0.2.dylib (compatibility version
>> 9.0.0, current version 9.2.0)
>> 	/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version
>> 1.0.0)
>> 
>> /Resources/App:
>> 	@executable_path/../Libraries/libmono.0.0.0.dylib (compatibility version
>> 1.0.0, current version 1.0.0)
>> 	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version
>> 111.1.1)
>> 	@executable_path/../Libraries/libgthread-2.0.0.1800.1.dylib
>> (compatibility
>> version 1801.0.0, current version 1801.1.0)
>> 	@executable_path/../Libraries/libglib-2.0.0.1800.1.dylib (compatibility
>> version 1801.0.0, current version 1801.1.0)
>> 	@executable_path/../Libraries/libintl.8.0.2.dylib (compatibility version
>> 9.0.0, current version 9.2.0)
>> 	/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version
>> 1.0.0)
>> 
>> 
>> And voila, from a working app, you got a bundled app that doesn't work
>> and
>> throws the exception I stated in previous posts.
>> 
>> I'd digging into this, and I found that although all the file references
>> are
>> processes correctly by dyld, there is a duplicate gthread init call which
>> causes the crash. I'll dtrace this tommorow and post the stack traces of
>> both calls.
>> 
>> Thanks for the help so far. 
>> 
>> 
>> duanew wrote:
>> > 
>> > It is too vague (to me anyway) what you are actually doing... you might
>> > try
>> > posting the code as well as the steps involving mkbundle,
>> > install_name_tool,
>> > etc.
>> > 
>> > On Wed, Nov 12, 2008 at 11:43 AM, silver83 <silver83 at gmail.com> wrote:
>> > 
>> >>
>> >> I still couldn't get it to work, using either @install_path or @rpath
>> >> techniques...
>> >> Still getting gthread error :
>> >> GThread-ERROR **: GThread system may only be initialized once.
>> >>
>> >> 0   libSystem.B.dylib                   0x95123b9e __kill + 10
>> >> 1   libSystem.B.dylib                   0x9519aec2 raise + 26
>> >> 2   libSystem.B.dylib                   0x951aa47f abort + 73
>> >> 3   libglib-2.0.0.dylib                 0x00e81ecc g_log + 0
>> >> 4   libglib-2.0.0.dylib                 0x00e81ef5 g_log + 41
>> >> 5   libgthread-2.0.0.1800.1.dylib       0x0000e3d7 g_thread_init + 521
>> >> 6   libmono.0.0.0.dylib                 0x0073233d mini_init + 2968
>> >> (mini.c:14091)
>> >> 7   libmono.0.0.0.dylib                 0x00778a63 mono_main + 454
>> >> (driver.c:1445)
>> >> 8   LiboxEngine                         0x00001fd0 main + 215
>> >> 9   LiboxEngine                         0x00001e7a start + 54
>> >>
>> >> Help ??
>> >>
>> >>
>> >>
>> >> duanew wrote:
>> >> >
>> >> > I had a similar need.  I wanted to fully embed mono within my
>> >> application
>> >> > so
>> >> > the end user did not need to install mono.  I posted here:
>> >> > http://lists.ximian.com/pipermail/mono-osx/2008-October/001616.html
>> >> >
>> >> > which describes the steps I went through.  Two differences in my
>> post,
>> >> one
>> >> > is that I was using a DLL.  But now I use an EXE and have
>> essentially
>> >> the
>> >> > same workflow.  Two, I embedded my mono app into a Cocoa
>> application.
>> >> >
>> >> > I do not think you need that nant code referenced in the link in
>> your
>> >> > post.
>> >> > You can download monobjc and look how their make system handles
>> >> mkbundle.
>> >> > I
>> >> > started there and was able to pull out the necessary steps.  Monobjc
>> >> has
>> >> a
>> >> > very ellegant build system that is a greating starting point.
>> >> >
>> >> > Best of luck,
>> >> > Duane
>> >> >
>> >> > On Tue, Nov 11, 2008 at 6:48 AM, silver83 <silver83 at gmail.com>
>> wrote:
>> >> >
>> >> >>
>> >> >> I have bundled a mono console application using the following steps
>> :
>> >> >> 1. use mkbundle to create the binary
>> >> >> 2. use macpack to create a dummy .app
>> >> >> 3. inject the bundled binary into the .app's resources folder
>> >> >> 4. rewire the execution script and the files under /Resources to
>> >> execute
>> >> >> the
>> >> >> binary
>> >> >>
>> >> >> I run the application and everything is fine, but now I want to
>> rewire
>> >> >> library dependencies -
>> >> >> I'm using code from :
>> >> >>
>> >> >>
>> >> >>
>> >>
>> http://code.google.com/p/cocoa-sharp-dev/wiki/RedistributableAppWithoutInstallingMono
>> >> >>
>> >> >> to inject mono libraries into Resources folder, rewire my app to
>> use
>> >> >> them,
>> >> >> and rewire them to use themselves (using otool -L to see their
>> >> >> dependencies,
>> >> >> and install_name_tool to rewire them).
>> >> >>
>> >> >> During rewiring, I exclude things that I consider "non-mono" -
>> >> >> CoreFoundation, Carbon, libgcc, and libSystem.  I've tried several
>> >> >> mixtures
>> >> >> of which libraries to exclude, and I either end up with a
>> >> mono-dependent
>> >> >> application, or an application that crashed on :
>> >> >>
>> >> >> GThread-ERROR **: GThread system may only be initialized once.
>> >> >>
>> >> >> Some of the crash report :
>> >> >> Exception Type:  EXC_CRASH (SIGABRT)
>> >> >> Exception Codes: 0x0000000000000000, 0x0000000000000000
>> >> >> Crashed Thread:  0
>> >> >>
>> >> >> Thread 0 Crashed:
>> >> >> 0   libSystem.B.dylib                   0x95123b9e __kill + 10
>> >> >> 1   libSystem.B.dylib                   0x9519aec2 raise + 26
>> >> >> 2   libSystem.B.dylib                   0x951aa47f abort + 73
>> >> >> 3   libglib-2.0.0.dylib                 0x00c00ecc g_log + 0
>> >> >> 4   libglib-2.0.0.dylib                 0x00c00ef5 g_log + 41
>> >> >> 5   libgthread-2.0.0.1800.1.dylib       0x009ec3d7 g_thread_init +
>> 521
>> >> >> 6   libmono.0.0.0.dylib                 0x002c933d mini_init + 2968
>> >> >> (mini.c:14091)
>> >> >> 7   libmono.0.0.0.dylib                 0x0030fa63 mono_main + 454
>> >> >> (driver.c:1445)
>> >> >> 8   MyApp                         0x00001f62 main + 215
>> >> >> 9   MyApp                         0x00001df2 start + 54
>> >> >>
>> >> >> Thread 0 crashed with X86 Thread State (32-bit):
>> >> >>  eax: 0x00000000  ebx: 0x951aa43f  ecx: 0xbffff47c  edx: 0x95123b9e
>> >> >>  edi: 0x00000002  esi: 0x00d08010  ebp: 0xbffff498  esp: 0xbffff47c
>> >> >>
>> >> >>
>> >> >> Any help (clues, hints, things I can do to debug this, maybe dtrace
>> or
>> >> >> something) - would be much appreciated...
>> >> >>
>> >> >> Thanks in advance
>> >> >> Yoni.
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >> --
>> >> >> View this message in context:
>> >> >>
>> >>
>> http://www.nabble.com/Bundled-mono-console-application-on-OS-X-throwing-gthread-errors.-tp20437966p20437966.html
>> >> >> Sent from the Mono - OSX mailing list archive at Nabble.com.
>> >> >>
>> >> >> _______________________________________________
>> >> >> Mono-osx mailing list
>> >> >> Mono-osx at lists.ximian.com
>> >> >> http://lists.ximian.com/mailman/listinfo/mono-osx
>> >> >>
>> >> >
>> >> > _______________________________________________
>> >> > Mono-osx mailing list
>> >> > Mono-osx at lists.ximian.com
>> >> > http://lists.ximian.com/mailman/listinfo/mono-osx
>> >> >
>> >> >
>> >>
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/Bundled-mono-console-application-on-OS-X-throwing-gthread-errors.-tp20437966p20464171.html
>> >> Sent from the Mono - OSX mailing list archive at Nabble.com.
>> >>
>> >> _______________________________________________
>> >> Mono-osx mailing list
>> >> Mono-osx at lists.ximian.com
>> >> http://lists.ximian.com/mailman/listinfo/mono-osx
>> >>
>> > 
>> > _______________________________________________
>> > Mono-osx mailing list
>> > Mono-osx at lists.ximian.com
>> > http://lists.ximian.com/mailman/listinfo/mono-osx
>> > 
>> > 
>> 
> 
> _______________________________________________
> Mono-osx mailing list
> Mono-osx at lists.ximian.com
> http://lists.ximian.com/mailman/listinfo/mono-osx
> 
> 

-- 
View this message in context: http://www.nabble.com/Bundled-mono-console-application-on-OS-X-throwing-gthread-errors.-tp20437966p20507205.html
Sent from the Mono - OSX mailing list archive at Nabble.com.



More information about the Mono-osx mailing list