[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