<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Linux - Library (so) ohne Abhängikeiten?]]></title><description><![CDATA[<p>Da ich schon lange nicht mehr C/C++ programmiert habe, hoffe ich überhaupt mal, dass ich im C++-Forum hier richtig bin.</p>
<p>Ich möchte gerne eine Library (.so) in meinem Code nachladen. Das ganze klappt auch schon wunderbar, nur das Problem ist, dass ich zum Erstellen von der Library auch vom Mainprogramm ein .o brauche.</p>
<p>Dadurch linked er mir ja das .o File in das .so mitrein. Nur die Library (so) wird nur von meinem main Programm aus geladen.</p>
<p>Jetzt stellt sich mir die Frage, wenn ich die Library sowieso nur von meinem Programm aus lade, müsste das doch die Abhängigkeiten selbst erfüllen und somit müsste es ja nicht in die .so rein oder?</p>
<p>Ich habe halt schon lange nicht mehr C/C++ gemacht, sondern Java und dort reicht es eigentlich wenn entweder eine Bibliothek eine Abhängigkeit hat oder das Hauptprogramm. Beide müssten nicht sein!<br />
Geht das hier auch oder habe ich für C/C++ Verhältnisse falsch gedacht?</p>
<p>Falls ja, wie kompiliere ich das ganze dann?</p>
<p>Jetzt kompiliere und linke ich so die .so:</p>
<blockquote>
<p>g++ -Wall -fPIC -c loadpainter.cpp guipainter.cpp standardpainter.cpp</p>
<p>g++ -shared -Wl,-soname,libloadpainter.so.1 -o libloadpainter.so.1.0 loadpainter.o guipainter.o standardpainter.o</p>
</blockquote>
<p>Und die .so sollte eigentlich nur die loadpainter beinhalten und wird vom guipainter geladen (welche den standardpainter auch beinhaltet)!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262173/linux-library-so-ohne-abhängikeiten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 21:48:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262173.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Mar 2010 08:15:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Linux - Library (so) ohne Abhängikeiten? on Tue, 02 Mar 2010 08:15:22 GMT]]></title><description><![CDATA[<p>Da ich schon lange nicht mehr C/C++ programmiert habe, hoffe ich überhaupt mal, dass ich im C++-Forum hier richtig bin.</p>
<p>Ich möchte gerne eine Library (.so) in meinem Code nachladen. Das ganze klappt auch schon wunderbar, nur das Problem ist, dass ich zum Erstellen von der Library auch vom Mainprogramm ein .o brauche.</p>
<p>Dadurch linked er mir ja das .o File in das .so mitrein. Nur die Library (so) wird nur von meinem main Programm aus geladen.</p>
<p>Jetzt stellt sich mir die Frage, wenn ich die Library sowieso nur von meinem Programm aus lade, müsste das doch die Abhängigkeiten selbst erfüllen und somit müsste es ja nicht in die .so rein oder?</p>
<p>Ich habe halt schon lange nicht mehr C/C++ gemacht, sondern Java und dort reicht es eigentlich wenn entweder eine Bibliothek eine Abhängigkeit hat oder das Hauptprogramm. Beide müssten nicht sein!<br />
Geht das hier auch oder habe ich für C/C++ Verhältnisse falsch gedacht?</p>
<p>Falls ja, wie kompiliere ich das ganze dann?</p>
<p>Jetzt kompiliere und linke ich so die .so:</p>
<blockquote>
<p>g++ -Wall -fPIC -c loadpainter.cpp guipainter.cpp standardpainter.cpp</p>
<p>g++ -shared -Wl,-soname,libloadpainter.so.1 -o libloadpainter.so.1.0 loadpainter.o guipainter.o standardpainter.o</p>
</blockquote>
<p>Und die .so sollte eigentlich nur die loadpainter beinhalten und wird vom guipainter geladen (welche den standardpainter auch beinhaltet)!</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863088</guid><dc:creator><![CDATA[thE_29]]></dc:creator><pubDate>Tue, 02 Mar 2010 08:15:22 GMT</pubDate></item><item><title><![CDATA[Reply to Linux - Library (so) ohne Abhängikeiten? on Tue, 02 Mar 2010 08:40:13 GMT]]></title><description><![CDATA[<p>thE_29 schrieb:</p>
<blockquote>
<p>Jetzt kompiliere und linke ich so die .so:</p>
<blockquote>
<p>g++ -Wall -fPIC -c loadpainter.cpp guipainter.cpp standardpainter.cpp</p>
<p>g++ -shared -Wl,-soname,libloadpainter.so.1 -o libloadpainter.so.1.0 loadpainter.o guipainter.o standardpainter.o</p>
</blockquote>
<p>Und die .so sollte eigentlich nur die loadpainter beinhalten und wird vom guipainter geladen (welche den standardpainter auch beinhaltet)!</p>
</blockquote>
<p>Ich habe Dein Problem nicht verstanden. Was soll wo drin sein und wie soll was wo nachgeladen werden?</p>
<p>Wenn Du in der .so nur loadpainter.o drin haben willst, warum erwähnst Du dann noch die anderen beiden Objektdateien?</p>
<p>Was meinst Du mit &quot;guipainter&quot;? Soll das ein eigenständiges Programm sein, welches deine libloadpainter.so.1 benutzen soll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863101</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 02 Mar 2010 08:40:13 GMT</pubDate></item><item><title><![CDATA[Reply to Linux - Library (so) ohne Abhängikeiten? on Tue, 02 Mar 2010 09:08:14 GMT]]></title><description><![CDATA[<p>Also der guipainter ist das eigenständige Programm welches auch den Standardpainter beinhaltet!</p>
<p>Kompiliere und linke ich so wie du meinst (und ich auch am Anfang gemacht habe) kommt das hier:</p>
<blockquote>
<p>g++ -Wall -fPIC -c loadpainter.cpp<br />
g++ -shared -Wl,-soname,libloadpainter.so.1 -o libloadpainter.so.1.0 loadpainter.o</p>
</blockquote>
<p>Die .o Datei erstellt er ohne Probleme! Jedoch wenn das .so generiert werden soll, kommt das hier:</p>
<blockquote>
<p>loadpainter.o:loadpainter.cpp:(.text+0x67): undefined reference to <code>CGUIPainter::~CGUIPainter()' loadpainter.o:loadpainter.cpp:(.text+0xbb): undefined reference to</code>CGUIPainter::~CGUIPainter()'<br />
loadpainter.o:loadpainter.cpp:(.text+0x100): undefined reference to <code>CGUIPainter::~CGUIPainter()' loadpainter.o:loadpainter.cpp:(.text+0x124): undefined reference to</code>CGUIPainter::~CGUIPainter()'<br />
loadpainter.o:loadpainter.cpp:(.text+0x174): undefined reference to <code>CGUIPainter::~CGUIPainter()' loadpainter.o:loadpainter.cpp:(.text+0x198): more undefined references to</code>CGUIPainter::~CGUIPainter()' follow<br />
loadpainter.o:loadpainter.cpp:(.text_ZN11CGUIPainterC2Ev\[CGUIPainter::CGUIPainter()\]+0x8): undefined reference to `vtab  
le for CGUIPainter'  
loadpainter.o:loadpainter.cpp:(.rdata_ZTI12CLoadPainter[typeinfo for CLoadPainter]+0x8): undefined reference to `typein<br />
fo for CGUIPainter'<br />
collect2: ld returned 1 exit status</p>
</blockquote>
<p>Nur wenn ich IM guipainter die .so lade, dann müsste er ja dort die Referenzen/Abhängigkeiten haben. Nur wenn er es mich nicht mal linken lässt, hilft mir das nicht viel..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863118</guid><dc:creator><![CDATA[thE_29]]></dc:creator><pubDate>Tue, 02 Mar 2010 09:08:14 GMT</pubDate></item><item><title><![CDATA[Reply to Linux - Library (so) ohne Abhängikeiten? on Tue, 02 Mar 2010 09:25:20 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig im Kopf habe, musst du beim Kompilieren des Programms -Wl,-E mitgeben. Das veranlasst g++, -E an den Linker zu übergeben, was den dazu veranlasst, die Symbole des Programms in eine dynamische Symboltabelle zu schreiben, wo sie beim dynamischen Linken nachher gefunden werden können. Kuck dir am besten die ld-Manpage dazu an, da steht das im Detail beschrieben (u.a. auch, wie man einschränkt, welche Symbole auf diese Weise exportiert werden sollen).</p>
<p>Allerdings wäre es natürlich bedeutend schöner, die Module sauber voneinander zu trennen - so kannst du die .so ja mit keinem anderen Programm benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863142</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 02 Mar 2010 09:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to Linux - Library (so) ohne Abhängikeiten? on Tue, 02 Mar 2010 09:45:57 GMT]]></title><description><![CDATA[<p>Naja, die .so soll ja auch nur von diesem Programm genutzt werden, weil es ein &quot;Interface&quot; implementiert (was im guipainter ist) und man die GUI dadurch austauschen kann.</p>
<p>Somit könnte mit der .so Datei kein anderes Programm was anfangen und ist auch nur für dieses Programm gedacht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Laut der man-page sollte ja -E passen, nur wenn ich das ausführe</p>
<blockquote>
<p>g++ -E -shared -Wl,-soname,libloadpainter.so.1 -o libloadpainter.so.1.0 loadpainter.o</p>
</blockquote>
<p>Ausgabe:</p>
<blockquote>
<p>g++: loadpainter.o: linker input file unused because linking not done</p>
</blockquote>
<p>Dann exisitert halt auch keine .so <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863163</guid><dc:creator><![CDATA[thE_29]]></dc:creator><pubDate>Tue, 02 Mar 2010 09:45:57 GMT</pubDate></item><item><title><![CDATA[Reply to Linux - Library (so) ohne Abhängikeiten? on Tue, 02 Mar 2010 10:04:39 GMT]]></title><description><![CDATA[<p>Nachtrag, so funktioniert wenn man es gleich unter Linux probiert.</p>
<p>Habs zum Testen unter Cygwin probieren wollen, aber da gehts halt nicht (ich brauchs sowieso unter nativem Linux).</p>
<p>Hier nochmals die 2 neuen Befehle:</p>
<blockquote>
<p>g++ -Wall -fPIC -c loadpainter.cpp<br />
g++ -shared -Wl,-E -Wl,-soname,libloadpainter.so.1 -o libloadpainter.so.1.0 loadpainter.o</p>
</blockquote>
<p>Wenn ich schon beim Kompilieren das -Wl,-E angebe, sagt er halt er nutzt es nicht weil halt nicht gelinked wird.</p>
<p>Jedenfalls vielen vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1863178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1863178</guid><dc:creator><![CDATA[thE_29]]></dc:creator><pubDate>Tue, 02 Mar 2010 10:04:39 GMT</pubDate></item></channel></rss>