libnoise + noiseutils -> Linkerprobleme

badday

Erfahrenes Mitglied
Moin zusammen,

ich sitze nun schon einige Zeit vor einem Problem und komme einfach nicht weiter. Das Problem ist nicht ganz einfach zu erklären, aber ich versuche es mal.

Es geht zunächst um libnoise: http://libnoise.sourceforge.net/index.html
Ich möchte diese Bibliothek verwenden und zusätzlich noiseutils (beides ist auf der Seite zum herunterladen vorhanden).
Nun bringt libnoise gleich eine Projektdatei für das VS mit sich und das funktioniert auch soweit. Ich möchte auch noiseutils verwenden, daher habe ich es einfach mal zu dem Projekt hinzugefügt. Das kompiliert auch soweit.
Nun möchte ich diese lib in einer weiteren, von mir geschrieben lib verwenden, dafür binde ich dort einige Header ein, auch hier gibt es noch keine Probleme.

Wenn ich aber nun versuche die exe zu linken (ich habe sowohl libnoise als auch meine eigene lib zum linken eingetragen) erhalte ich eine Reihe unaufgelöster Symbole, z. B.

Code:
my.lib(some.obj) : error LNK2019: unresolved external symbol "public: __thiscall noise::utils::NoiseMapBuilderPlane::NoiseMapBuilderPlane(void)" (****0NoiseMapBuilderPlane@utils@noise@@QAE@XZ) referenced in function "public: void __thiscall some::Init(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class other *,class irr::scene::ISceneManager *,class irr::scene::ICameraSceneNode *)" (?Init@Terrain@@QAEXV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAVa@@PAVISceneManager@scene@irr@@PAVICameraSceneNode@67@@Z)

Interessant dabei ist, dass sich die Linkerfehler ausschließlich auf noise::utils beziehen. Ich hatte versuchsweise einmal noiseutils direkt zu meinem Projekt (my) hinzugefügt, dann traten keine Probleme auf. Versuche ich das aber nun auf eine .dll "auszulagern", treten diese Probleme auf.


Wer sich die Frage stellt: Ja, und warum auslagern, wenn anders funktioniert? Der Grund liegt in der Lizenz.



Wäre echt sehr dankbar, wenn mir jemand helfen könnte, habe schon lange dran gesessen, recherchiert, aber bin nicht weitergekommen.



Gruß,

badday
 
Morgen,

würde das bedeuten, dass ich jede Klasse so deklarieren müsste?
Ich wundere mich nur etwas, weil alles andere, dass nicht in noiseutils ist, offenbar funktioniert. Da libnoise mit Projektdatei und beispielsweise .def-Datei ausgeliefert wird, dachte ich, dass vll. hier in einer Datei etwas steht, dass dazu führt, dass es bei diesen funktioniert.

Ich möchte ungern die Dateien verändern, da ich dann wohl dazu gezwungen wäre, diese Dateien mitauszuliefern (ich denke das ist bei der LGPL der Fall?).

Diese .def Datei macht mich etwas stutzig. Wenn ich diese nicht beachte, dann führt das dazu, dass keine .lib-Datei gebaut wird.


Vll. ist es am einfachsten, wenn man sich von dieser Seite http://libnoise.sourceforge.net/index.html mal die beiden herunterlädt (sind nicht groß).


Gruß,

badday
 
würde das bedeuten, dass ich jede Klasse so deklarieren müsste?
Ja. Oder du erstellst eine .def-Datei.

Ich wundere mich nur etwas, weil alles andere, dass nicht in noiseutils ist, offenbar funktioniert. Da libnoise mit Projektdatei und beispielsweise .def-Datei ausgeliefert wird, dachte ich, dass vll. hier in einer Datei etwas steht, dass dazu führt, dass es bei diesen funktioniert.
In der .def-Datei von libnoise stehen nur die Funktionen von libnoise. Wenn du zusätzlich die Funktionen von noiseutils exportieren willst, musst du die .def entsprechend erweitern oder eine eigene anlegen.

Ich möchte ungern die Dateien verändern, da ich dann wohl dazu gezwungen wäre, diese Dateien mitauszuliefern (ich denke das ist bei der LGPL der Fall?).
Das weiß ich leider nicht.

Diese .def Datei macht mich etwas stutzig. Wenn ich diese nicht beachte, dann führt das dazu, dass keine .lib-Datei gebaut wird.
Na ja, woher soll der Compiler denn auch ohne .def-Datei wissen, welche Stubs er in die .lib einbauen soll? Schau mal hier: http://msdn.microsoft.com/en-us/library/d91k01sh.aspx

Grüße,
Matthias
 
Zurück