dynamisches Linken einer Bibliothek



  • Hallo,

    ich versuche ein Programm zu schreiben, das meine Musikbibliothek sortiert. Dazu müssen ID3v2 tags ausgelesen und geschrieben werden können - ich möchte dafür die Bibliothek "taglib" verwenden.

    Der g++ kompiliert das Programm problemlos, aber der Linker findet die Funktionen aus der Bilbiothek nicht.
    Ein Minimalbeisiel:

    #include <iostream>
    #include <tag.h>
    #include <fileref.h>
    
    using namespace std;
    
    int main ()
    {
    	TagLib::FileRef f ("eins.mp3");
    	TagLib::String artist = f.tag()->artist(); 
    	TagLib::String track = f.tag()->title();
    
    	cout << artist << " - " << track << endl;
    }
    

    Wenn ich den g++ aufrufe erhalte ich folgendes:

    ***$ g++ -I/usr/local/include/taglib -L/usr/local/lib -ltag  -o minbsp minbsp.cpp
    /tmp/cceGpO7N.o: In function `main':
    minbsp.cpp:(.text+0x20): undefined reference to `TagLib::FileRef::FileRef(char const*, bool, TagLib::AudioProperties::ReadStyle)'
    minbsp.cpp:(.text+0x2c): undefined reference to `TagLib::FileRef::tag() const'
    minbsp.cpp:(.text+0x4e): undefined reference to `TagLib::FileRef::tag() const'
    minbsp.cpp:(.text+0x75): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, TagLib::String const&)'
    minbsp.cpp:(.text+0x91): undefined reference to `operator<<(std::basic_ostream<char, std::char_traits<char> >&, TagLib::String const&)'
    minbsp.cpp:(.text+0xaa): undefined reference to `TagLib::String::~String()'
    minbsp.cpp:(.text+0xb6): undefined reference to `TagLib::String::~String()'
    minbsp.cpp:(.text+0xc2): undefined reference to `TagLib::FileRef::~FileRef()'
    minbsp.cpp:(.text+0xdd): undefined reference to `TagLib::String::~String()'
    minbsp.cpp:(.text+0xee): undefined reference to `TagLib::String::~String()'
    minbsp.cpp:(.text+0xff): undefined reference to `TagLib::FileRef::~FileRef()'
    collect2: ld gab 1 als Ende-Status zurück
    

    Ich übergebe dem g++ den Pfad zur Bilbiothek (/usr/local/lib), dort ist die Bilbiohtek auch vorhanden (libtag.so). Wieso findet er die Bilbiothek nicht? Und wieso beschwert sich der Linker überhaupt, schließlich möchte ich die Bilbiothek ja dynamsich (und nicht statisch) linken. D.h. er müsste doch eigentlich erst zur Laufzeit meckern...



  • D.h. er müsste doch eigentlich erst zur Laufzeit meckern...

    Nein. Er muss die Namen trotzdem aufloesen. Was passiert, wenn -ltag ganz am Ende steht?



  • Danke knivil! soviel zeit für dieses Problem verschwendet und dann liegt es an sowas... Was macht das für einen unterschied wenn das -ltag hinten steht? Linkt der g++ dann anders?


  • Mod

    LD schrieb:

    Danke knivil! soviel zeit für dieses Problem verschwendet und dann liegt es an sowas... Was macht das für einen unterschied wenn das -ltag hinten steht? Linkt der g++ dann anders?

    Ja. Links müssen die Sachen stehen, die von denen rechts abhängig sind.



  • Danke, wieder was gelernt


Anmelden zum Antworten