tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von Matthias Reitinger
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
361
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    badday badday ist offline Mitglied Brokat
    Registriert seit
    Dec 2009
    Beiträge
    321
    Blog-Einträge
    1
    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 :
    1
    
    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
     
    Galaxy under Fire - 24/7 Online-Real-Time-Strategy-Game - servers are already running - Wir suchen einen Texturier für 3D-Modelle (bei Interesse einfach PM ;) )

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.774
    Blog-Einträge
    5
    Hallo,

    hast du denn die Klassen beim Erstellen der DLL bzw. im einzubindenden Header auch für den DLL-Export/Import deklariert? Siehe dazu Using dllimport and dllexport in C++ Classes.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    badday badday ist offline Mitglied Brokat
    Registriert seit
    Dec 2009
    Beiträge
    321
    Blog-Einträge
    1
    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
     
    Galaxy under Fire - 24/7 Online-Real-Time-Strategy-Game - servers are already running - Wir suchen einen Texturier für 3D-Modelle (bei Interesse einfach PM ;) )

  4. #4
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.774
    Blog-Einträge
    5
    Zitat Zitat von badday Beitrag anzeigen
    würde das bedeuten, dass ich jede Klasse so deklarieren müsste?
    Ja. Oder du erstellst eine .def-Datei.

    Zitat Zitat von badday Beitrag anzeigen
    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.

    Zitat Zitat von badday Beitrag anzeigen
    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.

    Zitat Zitat von badday Beitrag anzeigen
    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
    badday bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  5. #5
    badday badday ist offline Mitglied Brokat
    Registriert seit
    Dec 2009
    Beiträge
    321
    Blog-Einträge
    1
    Wunderbar, es hat mit der .def funktioniert. Danke dir!

    Gruß,

    badday
     
    Galaxy under Fire - 24/7 Online-Real-Time-Strategy-Game - servers are already running - Wir suchen einen Texturier für 3D-Modelle (bei Interesse einfach PM ;) )

Ähnliche Themen

  1. Linkerprobleme
    Von badday im Forum C/C++
    Antworten: 8
    Letzter Beitrag: 18.05.10, 16:17