<div dir="ltr">I was able to find a solution.&nbsp; What is different with my setup is I do not have a mono executable, just a mono DLL.&nbsp; This <a href="http://www.codeshorts.ca/2007/nov/01/leopard-linking-making-relocatable-libraries-movin">link</a> was very useful.&nbsp; Be sure to check out this link!&nbsp;&nbsp; <br>
<br>Just some background.. my application is a real Cocoa/Xcode app with ObjC running the GUI.&nbsp; The mono code, utilizing monobjc, is hooked up to the NIB controllers.&nbsp; So the business logic is run by mono and the UI is run by ObjC.&nbsp; I can send NSNotifications back and forth between the mono code and the ObjC code.&nbsp; Mono loads data into the controllers, the UI then displays the data.&nbsp; Another note, I use Dumbarton to load the DLL and init mono.&nbsp; There probably is a way to init the DLL without Dumbarton but it works.&nbsp; Yes yes I know monobjc can do all the UI work as well... but we already had UI code on mac and windows.&nbsp; Now we truly have a common business layer!!!!!<br>
<br>To embed a DLL without mono being installed I am currently performing these steps:<br><span style="font-family: courier new,monospace;">mkbundle -o xx.c -oo libxx.a --nomain -c&nbsp; --machine-config ... -L &lt;mono lib paths&gt; all of the referenced libraries including mscorlib.dll</span><br>
<br>The xx.c is compiled into the Xcode app.&nbsp; And libxx.a is linked, with -lxx as a linker flag.&nbsp; Add a library search path to where libxx.a is.<br><br>I then run these libraries (below) through install_name_tool.&nbsp; You only have to do these next 2 steps once.<br>
<span style="font-family: courier new,monospace;">libglib-2.0.0.1400.1.dylib&nbsp;&nbsp;&nbsp; libgthread-2.0.0.1400.1.dylib&nbsp;&nbsp;&nbsp; libmono.0.0.0.dylib</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">libgmodule-2.0.0.1400.1.dylib&nbsp;&nbsp;&nbsp; libintl.8.0.1.dylib</span>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
<br>Two things have to be performed on these libraries.&nbsp; First the id of the file has to be changed from the /Library/Frameworks/Mono.framework reference to @loader_path/../Libraries/&lt;name&gt;.&nbsp; Run otool -L &lt;the dylib file&gt;.<br>
<span style="font-family: courier new,monospace;">install_name_tool -id @loader_path/../Libraries/libintl.8.0.1.dylib libintl.8.0.1.dylib</span><br><br>The second operation is to change the references to other dynamic libraries you are embedding.<br>
<span style="font-family: courier new,monospace;">install_name_tool -change /Library/Frameworks/Mono.framework/Versions/1.9.1/lib/libintl.8.0.1.dylib @loader_path/../Libraries/libintl.8.0.1.dylib libglib-2.0.0.1400.1.dylib</span><br>
<br>Basically what you are doing is telling the runtime app where to find these dynmaic libraries.&nbsp; Rather than in the Frameworks directory look relative to the application.&nbsp; Place these modified libraires in &lt;yourapp&gt;.app/Contents/Libraries.<br>
<br>Compile the xcode application normally.&nbsp; Then run install_name_tool on it as well, &lt;yourapp&gt;.app/Contents/MacOS/&lt;yourapp&gt;<br><span style="font-family: courier new,monospace;">install_name_tool -change /Library/Frameworks/Mono.framework/Versions/1.9.1/lib/libgthread-2.0.0.1400.1.dylib @loader_path/../Libraries/libgthread-2.0.0.1400.1.dylib &lt;yourapp&gt; </span><br style="font-family: courier new,monospace;">
<br>Now remember you have to run this install_name_tool many times.&nbsp; Once for each library referenced by your application.&nbsp; And once for each reference in the dynamic libraries to another dynamic library that you are trying to embed.&nbsp; Use otool -L &lt;file&gt; to find the references you need to modify.<br>
<br>I naturally wanted to avoid the static option since that requires special licensing.&nbsp; So far this appears to work.&nbsp; These steps are what mkbundle is trying to do... but it appears it only really works on executables.... or I&#39;m missing something.<br>
<br>Hopefully this will prove useful to someone down the road.<br><br>Duane<br><br><br><div class="gmail_quote">On Wed, Oct 1, 2008 at 4:45 PM, David Rivera <span dir="ltr">&lt;<a href="mailto:mithril@me.com">mithril@me.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&nbsp;Monobjc provides the ability to compile a Cocoa app with the required mono frameworks embedded within it so that it does not require mono to be installed on the system to run it. It is implemented as a couple Nant tasks. I&#39;m not sure if it will work for you or not, but you might look into it, its what I use.<br>

<br>
<a href="http://www.monobjc.net" target="_blank">www.monobjc.net</a><br>
<br>
-David Rivera<br>
<div><div></div><div class="Wj3C7c"><br>
On Wednesday, October 01, 2008, at 08:14AM, &quot;Duane Wandless&quot; &lt;<a href="mailto:duane@wandless.net">duane@wandless.net</a>&gt; wrote:<br>
&gt;I am trying to create a DLL that does not require mono to be installed. &nbsp;I<br>
&gt;have used mkbundle with this command line:<br>
&gt;<br>
&gt;mkbundle -o host.c --nomain -c -oo libhost.a -L &lt;path to mono libraries&gt;<br>
&gt;MacMonoClient.dll System.dll System.Core.dll etc.<br>
&gt;<br>
&gt;I can successfully compile and link the host.c file and the libhost.a object<br>
&gt;file into a Cocoa Objc application. &nbsp;At runtime I can use<br>
&gt;mono_domain_assembly_open() to load the &#39;bundled&#39; library. &nbsp;And it works.<br>
&gt;<br>
&gt;However, if I move the Mono.framework out of the way and run the application<br>
&gt;I get this error:<br>
&gt;dyld: Library not loaded: /Library/Frameworks/Mono.<br>
&gt;framework/Versions/1.9.1/lib/libintl.8.0.1.dylib<br>
&gt; &nbsp;Referenced from: /Users/username/MySrc/mycode/sandbox/My<br>
&gt;Desktop/build/Debug/My Desktop.app/Contents/MacOS/My Desktop<br>
&gt; &nbsp;Reason: image not found<br>
&gt;<br>
&gt;Now of course I&#39;d like to do all of the relocation magic on the dylib&#39;s etc<br>
&gt;so that I do not need Mono installed. &nbsp;I have had no success in this<br>
&gt;effort. &nbsp;The result of mkbundle is not a file that otool can find symbols.<br>
&gt;install_name_tool appears to do nothing.<br>
&gt;<br>
&gt;So the basic question is: can I fully embed a mono library so that it is not<br>
&gt;required to have mono installed? &nbsp;And if yes... then what am I doing wrong?<br>
&gt;<br>
&gt;Thanks for any help!<br>
&gt;<br>
</div></div>_______________________________________________<br>
Mono-osx mailing list<br>
<a href="mailto:Mono-osx@lists.ximian.com">Mono-osx@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-osx" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-osx</a><br>
</blockquote></div><br></div>