<?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[Wrapper soll shared libraries mit gleichen Methoden aufrufen]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>momentan schreibe ich unter Linux einen Wrapper, welches Funktionen aus shared libraries benutzen soll. Die libraries haben alle die gleichen Funktionen, sind aber etwas anders deklariert. D.h. der Wrapper soll je nach Typ die richtige library aufrufen. Wenn ich unter Netbeans die libraries in die Linker-Optionen eintrage, dann wird immer nur die 1. library benutzt. Ich möchte aber diese nicht in den Projekteigenschaften eintragen, sondern der zugehörigen C++ Datei mitteilen, dass er eine bestimmte Library benutzen soll.</p>
<p>Ist dies überhaupt möglich?</p>
<p>BS: Linux<br />
IDE: Netbeans 7.2<br />
Sprache: C++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/311882/wrapper-soll-shared-libraries-mit-gleichen-methoden-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 03 Aug 2026 07:25:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/311882.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 17 Dec 2012 13:38:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 13:38:38 GMT]]></title><description><![CDATA[<p>Hallo liebe Community,</p>
<p>momentan schreibe ich unter Linux einen Wrapper, welches Funktionen aus shared libraries benutzen soll. Die libraries haben alle die gleichen Funktionen, sind aber etwas anders deklariert. D.h. der Wrapper soll je nach Typ die richtige library aufrufen. Wenn ich unter Netbeans die libraries in die Linker-Optionen eintrage, dann wird immer nur die 1. library benutzt. Ich möchte aber diese nicht in den Projekteigenschaften eintragen, sondern der zugehörigen C++ Datei mitteilen, dass er eine bestimmte Library benutzen soll.</p>
<p>Ist dies überhaupt möglich?</p>
<p>BS: Linux<br />
IDE: Netbeans 7.2<br />
Sprache: C++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280879</guid><dc:creator><![CDATA[kartal66]]></dc:creator><pubDate>Mon, 17 Dec 2012 13:38:38 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 14:13:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>sind dies denn reine C Libraries?</p>
<p>Mit dem MSVC würde man dann &quot;#pragma comment(lib, &quot;xxx.lib&quot;)&quot; benutzen, dies scheint es laut Suche beim gcc aber nicht zu geben.<br />
Aber gehe mal die Internetseiten zu &quot;gcc pragma lib&quot; durch, evtl. gibt es doch einen Workaround?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280889</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280889</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Mon, 17 Dec 2012 14:13:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 14:17:21 GMT]]></title><description><![CDATA[<p>Th69 schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>sind dies denn reine C Libraries?</p>
<p>Mit dem MSVC würde man dann &quot;#pragma comment(lib, &quot;xxx.lib&quot;)&quot; benutzen, dies scheint es laut Suche beim gcc aber nicht zu geben.<br />
Aber gehe mal die Internetseiten zu &quot;gcc pragma lib&quot; durch, evtl. gibt es doch einen Workaround?</p>
</blockquote>
<p>Hi,</p>
<p>danke für deine Antwort. Genau, es sind reine C libraries. Werde ich machen <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="🙂"
    /></p>
<p>Es muss doch aber etwas geben, womit man jeder C-Datei sagen kann, welche library er benutzen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280891</guid><dc:creator><![CDATA[kartal66]]></dc:creator><pubDate>Mon, 17 Dec 2012 14:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 14:54:00 GMT]]></title><description><![CDATA[<p>kartal66 schrieb:</p>
<blockquote>
<p>momentan schreibe ich unter Linux einen Wrapper, welches Funktionen aus shared libraries benutzen soll. Die libraries haben alle die gleichen Funktionen, sind aber etwas anders deklariert.</p>
</blockquote>
<p>Was genau heißt &quot;gleich aber anders deklariert&quot;? Gibt es da Namenskollisionen? Gibt es in der einen Bibliothek eine Funktion, die genauso heitß wie eine andere Funktion aus einer anderen Bibliothek? Wenn ja, wüsste ich nicht, wie der dynamische Linker wissen sollte, welche Funktion aus welcher Bibliothek du irgendwo aufrufen willst. Aber du könntest die shared objects manuell laden und jeweils Funktionszeiger erfragen, also <a href="http://en.wikipedia.org/wiki/Dynamic_loading" rel="nofollow">dlopen/dlsym/dlclose</a>.</p>
<p>kartal66 schrieb:</p>
<blockquote>
<p>Ich möchte aber diese nicht in den Projekteigenschaften eintragen, sondern der zugehörigen C++ Datei mitteilen, dass er eine bestimmte Library benutzen soll.</p>
</blockquote>
<p>Welcher C++ Datei?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280908</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 17 Dec 2012 14:54:00 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 15:04:23 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Was genau heißt &quot;gleich aber anders deklariert&quot;? Gibt es da Namenskollisionen? Gibt es in der einen Bibliothek eine Funktion, die genauso heitß wie eine andere Funktion aus einer anderen Bibliothek? Wenn ja, wüsste ich nicht, wie der dynamische Linker wissen sollte, welche Funktion aus welcher Bibliothek du irgendwo aufrufen willst. Aber du könntest die shared objects manuell laden und jeweils Funktionszeiger erfragen, also <a href="http://en.wikipedia.org/wiki/Dynamic_loading" rel="nofollow">dlopen/dlsym/dlclose</a>.</p>
</blockquote>
<p>Z.b.<br />
Ich habe in 2 libraries die Funktionen mit dem Namen: <em><strong>printName</strong></em>. (Ist nur ein Beispiel)</p>
<p>Lib1:</p>
<pre><code>void printName(){
printf(&quot;Hallo, Jürgen\n&quot;);
}
</code></pre>
<p>Lib2:</p>
<pre><code>void printName(){
printf(&quot;Hallo, Hans\n&quot;);
}
</code></pre>
<p>Im Wrapper habe ich dann einmal eine Klasse mit dem Namen Jürgen und eine Klasse mit dem Namen Hans. Wenn ich jetzt aus Main auf die Funktion <em>xyz</em> der Klasse Jürgen zugreife, dann soll die <em><strong>printName()</strong></em> Funktion aus der Lib1 aufgerufen haben, und bei der Klasse Hans die Funktion aus Lib2.</p>
<p>Die verschiedenen Klassen sind bei mir in einem Projekt zusammengefasst, welche ein Interface implementieren.</p>
<p>Ich hoffe, dass ich es soweit erklären konnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280913</guid><dc:creator><![CDATA[kartal66]]></dc:creator><pubDate>Mon, 17 Dec 2012 15:04:23 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 15:35:45 GMT]]></title><description><![CDATA[<p>Joa, so dachte ich mir das schon. Nee, das ist nicht so schlau, die Funktionen in den verschiedenen Libs gleich zu benennen; denn eigentlich ist das quasi eine Verletzung der One-Definition-Rule. Du hast mehrere Definitionen derselben Funktion &quot;void printName(void)&quot;. Wenn du daran nichts ändern kannst, sehe ich keine andere Möglichkeit als über die dl*-Funktionen die SOs manuell zu laden und die printName-Funktionen über Funktionszeiger aufzurufen, die du vorher über dlsym erfragst. So kannst du die verschiedenen Libs noch auseinander halten, weil du für jede ein eigenes Handle beim Laden per dlopen bekommst.</p>
<p>Ich kenne das so von Plugin-Systemen. Der Plugin-Host lädt die SO-Datei manuell per dlopen und holt sich die Adresse einer einheitlichen registrier-Funktion per dlsym. Diese Funktion ruft er über den neuen Funktionszeiger auf und das Plugin konfiguriert sich und/oder teilt dem Host irgendwie mit, was es kann und wofür es gut ist, typischerweise dadurch, dass sie einen Zeiger auf eine im statischen Speicher stehende Datenstruktor zurück gibt, wo weitere Infos drin stehen, wie z.b. andere Funktionszeiger und so ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280923</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 17 Dec 2012 15:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 15:42:27 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Joa, so dachte ich mir das schon. Nee, das ist nicht so schlau, die Funktionen in den verschiedenen Libs gleich zu benennen; denn eigentlich ist das quasi eine Verletzung der One-Definition-Rule. Du hast mehrere Definitionen derselben Funktion &quot;void printName(void)&quot;. Wenn du daran nichts ändern kannst, sehe ich keine andere Möglichkeit als über die dl*-Funktionen die SOs manuell zu laden und die printName-Funktionen über Funktionszeiger aufzurufen, die du vorher über dlsym erfragst. So kannst du die verschiedenen Libs noch auseinander halten, weil du für jede ein eigenes Handle beim Laden per dlopen bekommst.</p>
</blockquote>
<p>Hi,</p>
<p>das muss ich leider so machen. Ich arbeite momentan hier in einem Projekt, bei der eine Steuergerätsoftware mehrere Varianten hat. Aus diesem Grund gibt es viele Funktionen mit gleichen Namen. Diese verschiedenen Varianten kann ich zu libraries linken, aber halt nicht so verwenden wie ich es möchte.</p>
<p>Mit den dl-Funktionen habe ich das ganze schon probiert. Es hat auch zum Teil funktioniert, bis auf viele Makros, welche in einer Header-Datei deklariert sind. Diese greifen auf verschiedene Buffer zu. Diese Buffer sind in einer anderen C-Datei definiert. Wenn ich jetzt in meinen Wrapper die Header-Datei mit den Makros inkludiere, dann bekomme ich ein Compilerfehler: undefined reference to :buffer..</p>
<p>Das Problem ist halt, dass er die Makros nicht über die Library nimmt, sondern direkt aus der Header-Datei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280930</guid><dc:creator><![CDATA[kartal66]]></dc:creator><pubDate>Mon, 17 Dec 2012 15:42:27 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 15:52:37 GMT]]></title><description><![CDATA[<p>Vielleicht schaffst du es ja mit den Wrappern -- also einer Stufe Indirektion mehr, wobei der Wrapper dann eindeutige Namen verwendet und intern irgendwie die richtige Funktion aufrufen kann. Wenn nicht: Mach dich bemerkbar und gib weiter, dass das aktuelle Design Schei**e ist und geändert werden muss.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280937</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 17 Dec 2012 15:52:37 GMT</pubDate></item><item><title><![CDATA[Reply to Wrapper soll shared libraries mit gleichen Methoden aufrufen on Mon, 17 Dec 2012 16:06:17 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Vielleicht schaffst du es ja mit den Wrappern -- also einer Stufe Indirektion mehr, wobei der Wrapper dann eindeutige Namen verwendet und intern irgendwie die richtige Funktion aufrufen kann. Wenn nicht: Mach dich bemerkbar und gib weiter, dass das aktuelle Design Schei**e ist und geändert werden muss.</p>
</blockquote>
<p>Danke für deine Hilfe <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="🙂"
    /></p>
<p>Ich hätte erwartet, dass bestimmte C-Dateien auch bestimmte Libraryies laden und deren Funktionalität nutzen können. Und das geht leider nicht, bzw. nur bedingt.Zumindest in meinem Fall <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>
<p>So wäre eigentlich meine Vorstellung:</p>
<p><strong>Projekt XYZ:</strong><br />
-Hans.c -&gt; linkt <a href="http://libHans.so" rel="nofollow">libHans.so</a><br />
-Jürgen.c -&gt; linkt <a href="http://xn--libJrgen-95a.so" rel="nofollow">libJürgen.so</a><br />
-Gustav.c -&gt; linkt <a href="http://libGustav.so" rel="nofollow">libGustav.so</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2280943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2280943</guid><dc:creator><![CDATA[kartal66]]></dc:creator><pubDate>Mon, 17 Dec 2012 16:06:17 GMT</pubDate></item></channel></rss>