C++-Wrapper um C-Lib: unresolved external symbols [GELÖST!]
Verfasst: 22.10.2009, 17:26
Hallo zusammen!
Hier meine Problembeschreibung, in der Hoffnung dass jemand die Energie aufbringt, sich das epische Posting hier durchzulesen :? :
ich hab eine statische Library mit C-Funktionen. Damit man diese Funktionen auch ordentlich unter C++ nutzen kann, gibt's einen C++ Wrapper, der die ganzen Funktionen schön sauber in C++ Klassen verpackt und die C-Aufrufe kapselt. Mein Wrapper ist also selbst auch eine Library, und linkt selber die C-Funktionen, sodass man als Benutzer in seiner Applikation nur noch den Wrapper als einzige Library einbinden muss.
Den Wrapper kann ich ohne Fehlermeldung bauen, aber wenn ich jetzt eine Applikation bauen will, die diesen Wrapper benutzt, dann krieg ich beim Linken "unresolved external Symbols" für einige Funktionen der C-Library. Ich hab versucht rauszufinden, welche Eigenschaften die Funktionen haben, die betroffen sind:
1. Wenn meine C-lib eine Funktion X innerhalb von einer Funktion A aufruft, und ich kriege dazu den "unresolved external symbol X referenced in Function A", dann wird X auch in keiner anderen Funktion gefunden, die zusammen mit A in der gleichen Datei definiert ist.
2. Ich kann Funktion X innerhalb von manchen anderen Funktionen aufrufen, ohne den Fehler zu bekommen. Diese Funktionen sind dann in Dateien definiert, die dann wahrscheinlich nicht in dem Projekt benutzt werden. (Logisch, dann wird erst gar nicht gelinkt, schätz ich)
3. wenn ich Funktion X innerhalb der Funktionen A1 und A2 (wobei A1 und A2 zusammen in der gleichen Datei definiert sind) aufrufe, dann kriege ich den Fehler nur für die obere der beiden Funktionen. (ist das normal ?)
4. Wenn ich die C-Library, den Wrapper und die Applikation zusammen in der gleichen Solution habe, funktioniert alles mit genau den gleichen Projektdateien wunderbar ohne irgendwelche Fehler. Erst wenn ich die Applikation über eine getrennte Solution bauen will, gibt's die Probleme.
Der Wrapper scheint also manche .c Dateien in der C-Lib beim Bauen des Wrappers einfach nicht "durchzureichen".
Ich hab bei den Linker-Optionen des wrappers schon so ziemlich alles ausprobiert, ohne Erfolg. Ich werd noch mehr Infos sammeln, aber vielleicht hat jemand schon einen Verdacht ?
Für jede Idee sehr dankbar:
die alte frau ponx
Hier meine Problembeschreibung, in der Hoffnung dass jemand die Energie aufbringt, sich das epische Posting hier durchzulesen :? :
ich hab eine statische Library mit C-Funktionen. Damit man diese Funktionen auch ordentlich unter C++ nutzen kann, gibt's einen C++ Wrapper, der die ganzen Funktionen schön sauber in C++ Klassen verpackt und die C-Aufrufe kapselt. Mein Wrapper ist also selbst auch eine Library, und linkt selber die C-Funktionen, sodass man als Benutzer in seiner Applikation nur noch den Wrapper als einzige Library einbinden muss.
Den Wrapper kann ich ohne Fehlermeldung bauen, aber wenn ich jetzt eine Applikation bauen will, die diesen Wrapper benutzt, dann krieg ich beim Linken "unresolved external Symbols" für einige Funktionen der C-Library. Ich hab versucht rauszufinden, welche Eigenschaften die Funktionen haben, die betroffen sind:
1. Wenn meine C-lib eine Funktion X innerhalb von einer Funktion A aufruft, und ich kriege dazu den "unresolved external symbol X referenced in Function A", dann wird X auch in keiner anderen Funktion gefunden, die zusammen mit A in der gleichen Datei definiert ist.
2. Ich kann Funktion X innerhalb von manchen anderen Funktionen aufrufen, ohne den Fehler zu bekommen. Diese Funktionen sind dann in Dateien definiert, die dann wahrscheinlich nicht in dem Projekt benutzt werden. (Logisch, dann wird erst gar nicht gelinkt, schätz ich)
3. wenn ich Funktion X innerhalb der Funktionen A1 und A2 (wobei A1 und A2 zusammen in der gleichen Datei definiert sind) aufrufe, dann kriege ich den Fehler nur für die obere der beiden Funktionen. (ist das normal ?)
4. Wenn ich die C-Library, den Wrapper und die Applikation zusammen in der gleichen Solution habe, funktioniert alles mit genau den gleichen Projektdateien wunderbar ohne irgendwelche Fehler. Erst wenn ich die Applikation über eine getrennte Solution bauen will, gibt's die Probleme.
Der Wrapper scheint also manche .c Dateien in der C-Lib beim Bauen des Wrappers einfach nicht "durchzureichen".
Ich hab bei den Linker-Optionen des wrappers schon so ziemlich alles ausprobiert, ohne Erfolg. Ich werd noch mehr Infos sammeln, aber vielleicht hat jemand schon einen Verdacht ?
Für jede Idee sehr dankbar:
die alte frau ponx