[aufgelöst] TagLib einbinden - unresolved external symbol



  • Hallo,

    ich möchte ein Programm auf Windows portieren und benötige dafür TagLib.

    Ich habe TagLib heruntergeladen, habe es mit cmake + msbuild (x64 msvc command prompt) erstellt und habe jetzt schlussendlich mein Build in C:\Program Files (x86)\taglib mitsamt lib und include Ordner.

    Ich arbeite mit QtCreator, deshalb habe ich einfach das Feature "Add Library" benutzt und den Pfad zur Lib angegeben, aber ich bekomme trotzdem Fehlermeldungen.

    Mein .pro-File sieht so aus:

    CONFIG += c++17
    
    # das hier funktioniert soweit
    unix:QMAKE_CXXFLAGS += -std=c++17
    unix:LIBS += -ltag -lstdc++fs
    
    ...
    
    win32: LIBS += -L$$PWD/'../../../../../../Program Files (x86)/taglib/lib/' -ltag
    win32: LIBS += -L$$PWD/'../../../../../../Program Files (x86)/taglib/lib/' -ltag_c
    
    win32: INCLUDEPATH += $$PWD/'../../../../../../Program Files (x86)/taglib/include'
    win32: DEPENDPATH += $$PWD/'../../../../../../Program Files (x86)/taglib/include'
    

    Ich habe es mit MSVC 2019 64- und 32-bit versucht zu kompilieren, bekomme die gleiche Fehlermeldungen mit denen ich nicht viel anfangen kann.

    track_iterator.obj:-1: 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 "public: void __cdecl track_iterator::add_track(class QString const &)" (?add_track@track_iterator@@QEAAXAEBVQString@@@Z)
    

    Ich habe jede Lib eingebindet, die mit dem Build erstellt wurde.

    Hoffentlich kann mir hier einer weiterhelfen.



  • This post is deleted!


  • Bist du sicher, daß die Pfadangabe stimmt? Nimm doch einfach 'C:/Program Files (x86)/taglib/...' oder '/Program Files (x86)/taglib/...' (falls dein Projekt auch auf C: liegt).

    PS: Persönlich würde ich aber Libraries nicht unter Program Files ablegen, sondern in ein eigenes Libs-Verzeichnis deines Projekte-Ordners.



  • @eigenartig
    Sind die Aufrufkonventionen (Calling Convention) deiner Lib und deines Hauptprogramms identisch?

    Ich habe es mit MSVC 2019 64- und 32-bit versucht zu kompilieren, bekomme die gleiche Fehlermeldungen mit denen ich nicht viel anfangen kann.

    Unter VS findest du diese unter Projekt->Eigenschaften->Konfigurationseigenschaften->C/C++->Erweitert->Aufrufkonvention.

    Mich macht da nämlich die folgende Zeile ein wenig stutzig:

    ... unresolved external symbol "__declspec(dllimport) public: __cdecl TagLib

    Ich hätte da eher so etwas wie

    __declspec(dllimport) __stdcall public: __cdecl TagLib
    

    erwartet.



  • @eigenartig sagte in TagLib einbinden - unresolved external symbol:

    track_iterator.obj:-1: 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 "public: void __cdecl track_iterator::add_track(class QString const &)" (?add_track@track_iterator@@QEAAXAEBVQString@@@Z)
    

    Ist das alles, was es an Fehlermeldungen gibt, oder ist das nur die letzte? Build-Prozesse verschlucken sich nämlich schonmal gerne an Leerzeichen in Pfadangaben, selbst wenn man sie in Anführungszeichen packt. Das Problem ist so verbreitet, dass man eigentlich in nahezu jedem Kontext davon abraten kann (selbst wenn die Build-Systeme damit klarkommen, gibt es immer wieder irgendein während des Build aufgerufenes externes Tool oder Skript dass die Leerzeichen versemmelt).

    Ich habe jede Lib eingebindet, die mit dem Build erstellt wurde.

    Vielleicht ist das auch dein Problem. Weisst du z.B. was tag_c ist und wofür du sie brauchst? Ich weiss es auch nicht, aber ich würde es mal ohne die versuchen. In der Unix-Version wird die ja auch nicht gelinkt.

    Könnten natürlich auch die von @Quiche-Lorraine erwähnten Calling Conventions sein, das wäre bei mir aber etwas weiter hinten auf der Checkliste.



  • @Quiche-Lorraine,
    Ich habe von __cdecl auf __stdcall umgeschaltet und das Projekt im Debug Modus neu erstellt. Ich bekomme allerdings immer noch die gleiche Fehlermeldung, glaub ich.

    @Finnegan,
    ich glaube tag_c ist für die C-Lib. Aber ich habs auch ohne versucht. Und die neu erstellte Lib befindet sich jetzt unter einem Pfad der ohne Leerzeichen auskommt.

    Trotzdem glaube ich, dass ich immer noch die gleichen Fehlermeldungen bekomme.

    Hier nochmal die Modifikation meines .pro-Files:

    win32: LIBS += -L$$PWD/taglib/lib/ -ltag
    
    INCLUDEPATH += $$PWD/taglib/include
    DEPENDPATH += $$PWD/taglib/include
    

    Ich habe die Lib wieder mit der "Add Library" Funktion von QtCreator als dynamische und externe Bibliothek eingebunden und keine Leerzeichen im Pfad.

    Hier der komplette Build-Prozess:

    
    18:39:13: Running steps for project melody...
    18:39:13: Starting: "C:\Qt\5.15.1\msvc2019_64\bin\qmake.exe" C:\Users\spiri\Documents\cppProjects\melody\melody\melody.pro -spec win32-msvc "CONFIG+=debug" "CONFIG+=qml_debug"
    18:39:14: The process "C:\Qt\5.15.1\msvc2019_64\bin\qmake.exe" exited normally.
    18:39:14: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe" -f C:/Users/spiri/Documents/cppProjects/melody/build-melody-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug/Makefile qmake_all
    
    jom 1.1.3 - empower your cores
    
    18:39:14: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited normally.
    18:39:14: Starting: "C:\Qt\Tools\QtCreator\bin\jom.exe" 
    	C:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\files_list.obj.6364.47.jom
    files_list.cpp
    	cl -BxC:\Qt\5.15.1\msvc2019_64\bin\qmake.exe -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -E C:\Qt\5.15.1\msvc2019_64\mkspecs\features\data\dummy.cpp 2>NUL >debug\moc_predefs.h
    	C:\Qt\5.15.1\msvc2019_64\bin\moc.exe -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB --compiler-flavor=msvc --include C:/Users/spiri/Documents/cppProjects/melody/build-melody-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug/debug/moc_predefs.h -IC:/Qt/5.15.1/msvc2019_64/mkspecs/win32-msvc -IC:/Users/spiri/Documents/cppProjects/melody/melody -IC:/Users/spiri/Documents/cppProjects/melody/melody/taglib/include -IC:/Qt/5.15.1/msvc2019_64/include -IC:/Qt/5.15.1/msvc2019_64/include/QtQuick -IC:/Qt/5.15.1/msvc2019_64/include/QtWidgets -IC:/Qt/5.15.1/msvc2019_64/include/QtMultimedia -IC:/Qt/5.15.1/msvc2019_64/include/QtGui -IC:/Qt/5.15.1/msvc2019_64/include/QtANGLE -IC:/Qt/5.15.1/msvc2019_64/include/QtQmlModels -IC:/Qt/5.15.1/msvc2019_64/include/QtQml -IC:/Qt/5.15.1/msvc2019_64/include/QtNetwork -IC:/Qt/5.15.1/msvc2019_64/include/QtCore -I. -I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\ATLMFC\include" -I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" ..\melody\player_widget.hpp -o debug\moc_player_widget.cpp
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\search_widget.obj.6364.125.jom
    search_widget.cpp
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\player_widget.obj.6364.94.jom
    player_widget.cpp
    	C:\Qt\5.15.1\msvc2019_64\bin\moc.exe -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB --compiler-flavor=msvc --include C:/Users/spiri/Documents/cppProjects/melody/build-melody-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug/debug/moc_predefs.h -IC:/Qt/5.15.1/msvc2019_64/mkspecs/win32-msvc -IC:/Users/spiri/Documents/cppProjects/melody/melody -IC:/Users/spiri/Documents/cppProjects/melody/melody/taglib/include -IC:/Qt/5.15.1/msvc2019_64/include -IC:/Qt/5.15.1/msvc2019_64/include/QtQuick -IC:/Qt/5.15.1/msvc2019_64/include/QtWidgets -IC:/Qt/5.15.1/msvc2019_64/include/QtMultimedia -IC:/Qt/5.15.1/msvc2019_64/include/QtGui -IC:/Qt/5.15.1/msvc2019_64/include/QtANGLE -IC:/Qt/5.15.1/msvc2019_64/include/QtQmlModels -IC:/Qt/5.15.1/msvc2019_64/include/QtQml -IC:/Qt/5.15.1/msvc2019_64/include/QtNetwork -IC:/Qt/5.15.1/msvc2019_64/include/QtCore -I. -I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\ATLMFC\include" -I"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\include" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" -I"C:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" ..\melody\track_iterator.hpp -o debug\moc_track_iterator.cpp
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\track_iterator.obj.6364.140.jom
    track_iterator.cpp
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\main.obj.6364.62.jom
    main.cpp
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\main_window.obj.6364.78.jom
    main_window.cpp
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\moc_track_iterator.obj.6364.7484.jom
    moc_track_iterator.cpp
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\progress_widget.obj.6364.109.jom
    progress_widget.cpp
    	cl -c -nologo -Zc:wchar_t -FS -Zc:rvalueCast -Zc:inline -Zc:strictStrings -Zc:throwingNew -Zc:referenceBinding -Zc:__cplusplus -Zi -MDd -std:c++17 -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -wd4467 -EHsc /Fddebug\melody.vc.pdb -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DWIN64 -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_QUICK_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I..\melody -I. -I..\melody\taglib\include -IC:\Qt\5.15.1\msvc2019_64\include -IC:\Qt\5.15.1\msvc2019_64\include\QtQuick -IC:\Qt\5.15.1\msvc2019_64\include\QtWidgets -IC:\Qt\5.15.1\msvc2019_64\include\QtMultimedia -IC:\Qt\5.15.1\msvc2019_64\include\QtGui -IC:\Qt\5.15.1\msvc2019_64\include\QtANGLE -IC:\Qt\5.15.1\msvc2019_64\include\QtQmlModels -IC:\Qt\5.15.1\msvc2019_64\include\QtQml -IC:\Qt\5.15.1\msvc2019_64\include\QtNetwork -IC:\Qt\5.15.1\msvc2019_64\include\QtCore -Idebug -I/include -IC:\Qt\5.15.1\msvc2019_64\mkspecs\win32-msvc -Fodebug\ @C:\Users\spiri\AppData\Local\Temp\moc_player_widget.obj.6364.4469.jom
    moc_player_widget.cpp
    	link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\melody.exe @C:\Users\spiri\AppData\Local\Temp\melody.exe.6364.12047.jom
    track_iterator.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 "public: void __cdecl track_iterator::add_track(class QString const &)" (?add_track@track_iterator@@QEAAXAEBVQString@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl TagLib::String::~String(void)" (__imp_??1String@TagLib@@UEAA@XZ) referenced in function "public: void __cdecl track_iterator::add_track(class QString const &)" (?add_track@track_iterator@@QEAAXAEBVQString@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: char const * __cdecl TagLib::String::toCString(bool)const " (__imp_?toCString@String@TagLib@@QEBAPEBD_N@Z) referenced in function "public: void __cdecl track_iterator::add_track(class QString const &)" (?add_track@track_iterator@@QEAAXAEBVQString@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class TagLib::PropertyMap __cdecl TagLib::Tag::properties(void)const " (__imp_?properties@Tag@TagLib@@QEBA?AVPropertyMap@2@XZ) referenced in function "public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl TagLib::FileName::FileName(char const *)" (__imp_??0FileName@TagLib@@QEAA@PEBD@Z) referenced in function "public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class TagLib::String __cdecl TagLib::StringList::toString(class TagLib::String const &)const " (__imp_?toString@StringList@TagLib@@QEBA?AVString@2@AEBV32@@Z) referenced in function "public: void __cdecl track_iterator::add_track(class QString const &)" (?add_track@track_iterator@@QEAAXAEBVQString@@@Z)
      Hint on symbols that are defined and could potentially match:
        "__declspec(dllimport) public: class QString __cdecl QVariant::toString(void)const " (__imp_?toString@QVariant@@QEBA?AVQString@@XZ)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: int __cdecl TagLib::AudioProperties::lengthInMilliseconds(void)const " (__imp_?lengthInMilliseconds@AudioProperties@TagLib@@QEBAHXZ) referenced in function "public: void __cdecl track_iterator::add_track(class QString const &)" (?add_track@track_iterator@@QEAAXAEBVQString@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl TagLib::FileRef::FileRef(class TagLib::FileName,bool,enum TagLib::AudioProperties::ReadStyle)" (__imp_??0FileRef@TagLib@@QEAA@VFileName@1@_NW4ReadStyle@AudioProperties@1@@Z) referenced in function "public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl TagLib::FileRef::~FileRef(void)" (__imp_??1FileRef@TagLib@@UEAA@XZ) referenced in function "int `public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)'::`1'::dtor$2" (?dtor$2@?0???0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z@4HA)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class TagLib::Tag * __cdecl TagLib::FileRef::tag(void)const " (__imp_?tag@FileRef@TagLib@@QEBAPEAVTag@2@XZ) referenced in function "public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class TagLib::AudioProperties * __cdecl TagLib::FileRef::audioProperties(void)const " (__imp_?audioProperties@FileRef@TagLib@@QEBAPEAVAudioProperties@2@XZ) referenced in function "public: class TagLib::AudioProperties const & __cdecl id3_file::audio_properties(void)const " (?audio_properties@id3_file@@QEBAAEBVAudioProperties@TagLib@@XZ)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: bool __cdecl TagLib::FileRef::isNull(void)const " (__imp_?isNull@FileRef@TagLib@@QEBA_NXZ) referenced in function "public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl TagLib::PropertyMap::PropertyMap(void)" (__imp_??0PropertyMap@TagLib@@QEAA@XZ) referenced in function "public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl TagLib::PropertyMap::~PropertyMap(void)" (__imp_??1PropertyMap@TagLib@@UEAA@XZ) referenced in function "public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class TagLib::StringList & __cdecl TagLib::PropertyMap::operator[](class TagLib::String const &)" (__imp_??APropertyMap@TagLib@@QEAAAEAVStringList@1@AEBVString@1@@Z) referenced in function "public: void __cdecl track_iterator::add_track(class QString const &)" (?add_track@track_iterator@@QEAAXAEBVQString@@@Z)
    track_iterator.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: class TagLib::PropertyMap & __cdecl TagLib::PropertyMap::operator=(class TagLib::PropertyMap const &)" (__imp_??4PropertyMap@TagLib@@QEAAAEAV01@AEBV01@@Z) referenced in function "public: __cdecl id3_file::id3_file(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0id3_file@@QEAA@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)
    debug\melody.exe : fatal error LNK1120: 16 unresolved externals
    jom: C:\Users\spiri\Documents\cppProjects\melody\build-melody-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug\Makefile.Debug [debug\melody.exe] Error 1120
    jom: C:\Users\spiri\Documents\cppProjects\melody\build-melody-Desktop_Qt_5_15_1_MSVC2019_64bit-Debug\Makefile [debug] Error 2
    18:39:27: The process "C:\Qt\Tools\QtCreator\bin\jom.exe" exited with code 2.
    Error while building/deploying project melody (kit: Desktop Qt 5.15.1 MSVC2019 64bit)
    When executing step "Make"
    18:39:27: Elapsed time: 00:15.
    

    Ich habe nun auch mit dumpbin.exe von der msvc die Bitness gecheckt und glaube es ist 64-bit und habe es schlussendlich noch mit beiden Compiler-Versionen getestet. Hier ein Auszug:

    FILE HEADER VALUES
                8664 machine (x64)
    


  • @eigenartig sagte in TagLib einbinden - unresolved external symbol:

    Ich habe von __cdecl auf __stdcall umgeschaltet

    Du kannst nicht einfach die Aufrufkonvention in einem Header (einer Deklaration) ändern wenn es sich um eine bestehende fix-fertige Library in Binär handelt.

    stdcall wäre auch extrem seltsam für eine library die C ist.

    Bitte betreibe Ursachenforschung anstatt wild herumzuprobieren. Mir würde es zum Beispiel mal sehr spanisch vorkommen wenn im Build-Log die Library nicht erwähnt wird ...



  • 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. Zusätzlich bekomme ich noch folgende Warnung:

    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'	exercise	C:\Program Files (x86)\taglib\include\taglib\tiostream.h	53	
    


  • @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> (also cl ... 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 mit

    win32: 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 kommen cl.exe und link.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 die tag.lib überhaupt erwähnt wird (ich denke so heisst die Datei im lib-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 Makro TAGLIB_STATIC in deinem Projekt selbst verwenden.



  • Wie geil, mit #define TAGLIB_STATIC kompilierts.

    Wo hast du diese Information gefunden?



  • @Th69 Wow danke man.




Log in to reply