[aufgelöst] TagLib einbinden - unresolved external symbol
-
@Swordfish sagte in TagLib einbinden - unresolved external symbol:
Mir würde es zum Beispiel mal sehr spanisch vorkommen wenn im Build-Log die Library nicht erwähnt wird ...
Ja, das ist etwas, das ich auch überprüfen würde. Besonders wenn du die Lib in der
.pro
-Datei mit-ltag
einbindest. In der MSVC-Kommandozeile werden nämlich Bibliotheken nicht mit-l<Dateiname ohne 'lib'-Präfix und ohne .a-Suffix>
eingebunden sondern, einfach nur mit<Dateiname>
(alsocl ... tag.lib
).CMake übersetzt das automatisch in die korrekten Compiler-Argumente, selbst wenn man
-ltag
angibt, bei QT Creator bin ich mir da allerdings nicht so sicher.Dass die
tag.lib
im Build-Log nicht erwähnt wird, könnte daran liegen, dass hier Kommandozeilen-Argumente mit@
aus einer Datei eingebunden werden:link ... @C:\Users\spiri\AppData\Local\Temp\melody.exe.6364.12047.jom
In dieser Datei sollte sich eigentlich das
tag.lib
-Argument finden lassen. Das würde ich mal überprüfen (hoffentlich macht es die IDE nicht unnötig schwer und löscht die Datei direkt nach dem Build-Versuch).Ansonsten kannst du es in der
.pro
-Datei auch mal mitwin32: LIBS += -L$$PWD/taglib/lib/ tag.lib
versuchen. Wenn der Build-Prozess das direkt so an den Compiler/Linker weiterreicht, dann wäre das die korrekte(re) Kommandozeile. Mit Dashes (
-
) für Argumente und Slashes (/
) für Pfade kommencl.exe
undlink.exe
auf jeden Fall klar.@eigenartig sagte in TagLib einbinden - unresolved external symbol:
Ich habe versucht ein Beispielprogramm mit Visual Studio zu kompilieren und bekomme die gleichen Fehlermeldungen. Ich habe dazu alle Include's und die Lib angegeben.
Schau dir auf jeden fall immer die Kommendozeile mit dem Compiler- (
cl.exe
) oder Linker-Aufruf (link.exe
) an, ob dort dietag.lib
überhaupt erwähnt wird (ich denke so heisst die Datei imlib
-Unterverzeichnis). Es ist extrem nützlich zu wissen, wie man Programme in der Kommandozeile baut, auch wenn man ansonsten nur mit IDEs oder Build-Systemen arbeitet. Das erleichtert das Debuggen solcher Probleme ungemein.
-
Ich glaube nicht dass ich sie falsch einbinde.
Ich habe diese Zeile hier bei einem erhöhtem verbosity Level gefunden:
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\HostX86\x64\link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\\eigenartig\source\repos\exercise\x64\Debug\exercise.exe" /INCREMENTAL /NOLOGO tag.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG:FASTLINK /PDB:"C:\Users\\eigenartig\source\repos\exercise\x64\Debug\exercise.pdb" /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\\eigenartig\source\repos\exercise\x64\Debug\exercise.lib" /MACHINE:X64 x64\Debug\main.obj
-
@eigenartig Dann ist der nächste Tip architecture mismatch.
-
@Swordfish Wie soll ich das verstehen? Ich habe das tar.gz von der Website heruntergeladen, entpackt und alles auf dem Host-Rechner erstellt. Ich habe überprüft, dass die Bitness stimmt. Sollte laut meinem Wissen x64 sein, obwohl msbuild alles ins
Program Files (x86)
Verzeichnis installiert hat. Wenn ich jedoch mit 32-bit kompiliere bekomme ich folgende Warnmeldung:Warning LNK4272 library machine type 'x64' conflicts with target machine type 'x86' exercise C:\Program Files (x86)\taglib\lib\tag.lib 1
Die Library habe ich wie folgt erstellt:
$ cmake CMakeLists.txt # msbuild INSTALL.vcxproj
msbuild
habe ich als Administrator in der x64 Native Tools Command Prompt von Visual Studio aufgerufen. Habs jetzt auch mit der x86_64 Variante ausprobiert gehabt.Ich glaube bei architecture mismatch müsste ich wohl auch Warnmeldungen bekommen, die ich auch bekomme, wenn ich auf 32-bit umstelle. Ansonsten müsstest du mal erklären inwiefern das architecture mismatch sein soll?
Ich werde im Laufe des Tages wohl nochmal ein Build mit nem anderen PC versuchen, aber irgendwie würde es mich nicht wundern wenn ich die gleichen Fehlermeldungen bekomme.
EDIT: Ich habs auf nem anderen Rechner ausprobiert mit einer anderen TagLib-Version, TagLib 1.11 und bekomme leider immer noch unresolved external symbol errors.
-
Probiere mal die neueste Version "TagLib 1.11.1 Release - October 24, 2016": TagLib
Fixed binary incompatible change in TagLib::String.
-
@Th69 ich habs anfangs mit genau diesem Release ausprobiert und ich bekomme nicht nur unresolved external symbols für
TagLib::String
sondern für jedes Symbol das in der Lib vorkommt.
-
Dann paßt einfach der Pfad nicht.
Packe doch einfach mal diese Lib direkt in dein Projektverzeichnis und binde es von dort ein.
-
@Th69 Spiegelung meines Projektverzeichnisses, mitsamt include und lib-Ordner von TagLib:
C:\Users\eigenartig\source\repos\exercise\Debug C:\Users\eigenartig\source\repos\exercise\exercise C:\Users\eigenartig\source\repos\exercise\x64 C:\Users\eigenartig\source\repos\exercise\exercise.sln C:\Users\eigenartig\source\repos\exercise\Debug\exercise.pdb C:\Users\eigenartig\source\repos\exercise\exercise\Debug C:\Users\eigenartig\source\repos\exercise\exercise\include C:\Users\eigenartig\source\repos\exercise\exercise\lib C:\Users\eigenartig\source\repos\exercise\exercise\x64 C:\Users\eigenartig\source\repos\exercise\exercise\exercise.vcxproj C:\Users\eigenartig\source\repos\exercise\exercise\exercise.vcxproj.filters C:\Users\eigenartig\source\repos\exercise\exercise\exercise.vcxproj.user C:\Users\eigenartig\source\repos\exercise\exercise\main.cpp C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.log C:\Users\eigenartig\source\repos\exercise\exercise\Debug\main.obj C:\Users\eigenartig\source\repos\exercise\exercise\Debug\vc142.idb C:\Users\eigenartig\source\repos\exercise\exercise\Debug\vc142.pdb C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\CL.command.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\CL.read.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\CL.write.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\exercise.lastbuildstate C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\link-cvtres.read.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\link-cvtres.write.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\link-rc.read.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\link-rc.write.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\link.command.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\link.read.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\link.write.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\Debug\exercise.tlog\unsuccessfulbuild C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\aifffile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\aiffproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\apefile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\apefooter.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\apeitem.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\apeproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\apetag.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\asfattribute.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\asffile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\asfpicture.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\asfproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\asftag.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\attachedpictureframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\audioproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\chapterframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\commentsframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\eventtimingcodesframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\fileref.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\flacfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\flacmetadatablock.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\flacpicture.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\flacproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\generalencapsulatedobjectframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v1genres.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v1tag.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v2extendedheader.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v2footer.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v2frame.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v2framefactory.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v2header.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v2synchdata.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\id3v2tag.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\infotag.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\itfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\itproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\modfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\modfilebase.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\modproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\modtag.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mp4atom.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mp4coverart.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mp4file.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mp4item.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mp4properties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mp4tag.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mpcfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mpcproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mpegfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mpegheader.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\mpegproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\oggfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\oggflacfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\oggpage.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\oggpageheader.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\opusfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\opusproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\ownershipframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\podcastframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\popularimeterframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\privateframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\relativevolumeframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\rifffile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\s3mfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\s3mproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\speexfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\speexproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\synchronizedlyricsframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tableofcontentsframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tag.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\taglib.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\taglib_config.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\taglib_export.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tag_c.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tbytevector.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tbytevectorlist.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tbytevectorstream.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tdebuglistener.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\textidentificationframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tfilestream.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tiostream.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tlist.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tlist.tcc C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tmap.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tmap.tcc C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tpropertymap.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\trefcounter.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\trueaudiofile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\trueaudioproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tstring.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tstringlist.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\uniquefileidentifierframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\unknownframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\unsynchronizedlyricsframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\urllinkframe.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\vorbisfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\vorbisproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\wavfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\wavpackfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\wavpackproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\wavproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\xingheader.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\xiphcomment.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\xmfile.h C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\xmproperties.h C:\Users\eigenartig\source\repos\exercise\exercise\lib\pkgconfig C:\Users\eigenartig\source\repos\exercise\exercise\lib\tag.lib C:\Users\eigenartig\source\repos\exercise\exercise\lib\tag_c.lib C:\Users\eigenartig\source\repos\exercise\exercise\lib\pkgconfig\taglib.pc C:\Users\eigenartig\source\repos\exercise\exercise\lib\pkgconfig\taglib_c.pc C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.log C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\main.obj C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\vc142.idb C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\vc142.pdb C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\CL.command.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\CL.read.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\CL.write.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\exercise.lastbuildstate C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\link-cvtres.read.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\link-cvtres.write.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\link-rc.read.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\link-rc.write.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\link.command.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\link.read.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\link.write.1.tlog C:\Users\eigenartig\source\repos\exercise\exercise\x64\Debug\exercise.tlog\unsuccessfulbuild C:\Users\eigenartig\source\repos\exercise\x64\Debug C:\Users\eigenartig\source\repos\exercise\x64\Debug\exercise.pdb
Dann die MSVC-Optionen:
Include Directories:
C:\Users\eigenartig\source\repos\exercise\exercise\include
Library Directories:C:\Users\eigenartig\source\repos\exercise\exercise\lib
Additional Dependencies:tag.lib
Folgendes Beispiel:
#include <taglib/taglib.h> #include <taglib/fileref.h> #include <taglib/tstring.h> int main() { TagLib::String string("hello"); TagLib::FileRef ref; }
Rebuild Solution:
1>------ Rebuild All started: Project: exercise, Configuration: Debug x64 ------ 1>main.cpp 1>C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tiostream.h(53,30): warning C4251: 'TagLib::FileName::m_name': class 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' needs to have dll-interface to be used by clients of class 'TagLib::FileName' 1>D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xstring(4564): message : see declaration of 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>' 1>C:\Users\eigenartig\source\repos\exercise\exercise\include\taglib\tiostream.h(54,31): warning C4251: 'TagLib::FileName::m_wname': class 'std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>' needs to have dll-interface to be used by clients of class 'TagLib::FileName' 1>D:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include\xstring(4565): message : see declaration of 'std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t>>' 1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl TagLib::String::String(char const *,enum TagLib::String::Type)" (__imp_??0String@TagLib@@QEAA@PEBDW4Type@01@@Z) referenced in function main 1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl TagLib::String::~String(void)" (__imp_??1String@TagLib@@UEAA@XZ) referenced in function main 1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl TagLib::FileRef::FileRef(void)" (__imp_??0FileRef@TagLib@@QEAA@XZ) referenced in function main 1>main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl TagLib::FileRef::~FileRef(void)" (__imp_??1FileRef@TagLib@@UEAA@XZ) referenced in function main 1>C:\Users\eigenartig\source\repos\exercise\x64\Debug\exercise.exe : fatal error LNK1120: 4 unresolved externals 1>Done building project "exercise.vcxproj" -- FAILED. ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========
-
Dann schau mal mit "dumpbin.exe" in die "tag.lib", um zu sehen, ob sie sauber erstellt wurde (und auch die passenden Symbole exportiert sind).
PS: Hast du denn eine statische oder dynamische (d.h. mit DLL) Library erstellt?
Bei Einbindung der statischen TagLib mußt du auch das MakroTAGLIB_STATIC
in deinem Projekt selbst verwenden.
-
Wie geil, mit
#define TAGLIB_STATIC
kompilierts.Wo hast du diese Information gefunden?
-
@Th69 Wow danke man.
-
-
So so.
Könnte einen Hauch besser dokumentiert sein.
-
Du hättest es allen aber auch einfacher machen können, wenn du gleich geschrieben hättest, daß du eine statische TagLib gebaut und eingebunden hast.
-
@Th69 D.h. man muss bei jeder statischen Lib (ohne DLL) immer mit Makros frickeln?
EDIT: Und wie soll mein .gitignore File aussehen, wenn ich die TagLib Include- und Link-Directory im Projektverzeichnis liegen habe? Einfach ein Ignore auf den ganzen taglib Ordner? Muss ich da auf Lizenzen achten wenn ich das Projekt hochlade?
-
Nicht bei jeder Library, aber die Einbindung ist ja häufig compilerabhängig, wie z.B.
__declspec(dllexport)
und__declspec(dllimport)
bzw. weder noch bei einer statischen Lib, und dafür eignen sich eben Makros (und wenn in den Library-Headern diese Unterscheidung auch nötig ist, so muß das Makro dann auch in dem Hauptprojekt angegeben werden).Und wie ich schon schrieb, würde ich die Libraries in einen eigenen Ordner deines Projekte-Hauptordners (also oberhalb deines konkreten Projekts) ablegen (damit es von mehreren Projekten verwendet werden kann).
Und dieses solltest du dann in einem eigenen GIT-Repository sichern.
-
Ok vielen Dank nochmals.
-
Static, ich fass es nicht ... etwas ungünstig, dass die Lib in der Default-Konfiguration statisch gebaut wird (was man nicht so oft sieht - meist ists Gefummel wenn man ne Lib statisch braucht):
taglib/CMakeLists.txt:11: option(BUILD_SHARED_LIBS "Build shared libraries" OFF)
... und dafür aber die zusätzliche Makro-Definition benötigt wird. Da wäre vielleicht ein
TAGLIB_SHARED
-Makro eine bessere Wahl gewesen. Schön, wenn eine Default-Konfiguration so viele Steine wie möglich aus dem Weg räumt.