Linker error wenn boost und Qt gleichzeitig verwendet werden



  • Ich arbeite an einem c++ Projekt und würde dazu gerne Qt und boost verwenden. Wenn ich allerdings beide Libraries einbinde, bekomme ich diesen Linker error:

    error LNK2001: unresolved external symbol "private: static class std::codecvt const * & __cdecl boost::filesystem3::path::wchar_t_codecvt_facet(void)" (?wchar_t_codecvt_facet@path@filesystem3@boost@@CAAAPBV?$codecvt@GDH@std@@XZ)

    error LNK2001: unresolved external symbol "void __cdecl boost::filesystem3::path_traits::convert(char const *,char const *,class std::basic_string,class std::allocator > &,class std::codecvt const &)" (?convert@path_traits@filesystem3@boost@@YAXPBD0AAV?basic_string@GU?basic\_string@GU?char_traits@G@std@@V?allocator@G@2@@std@@ABV?allocator@G@2@@std@@ABV?codecvt@GDH@5@@Z)

    error LNK2001: unresolved external symbol "void __cdecl boost::filesystem3::path_traits::dispatch(class boost::filesystem3::directory_entry const &,class std::basic_string,class std::allocator > &,class std::codecvt const &)" (?dispatch@path_traits@filesystem3@boost@@YAXABVdirectory_entry@23@AAV?basic_string@GU?basic\_string@GU?char_traits@G@std@@V?allocator@G@2@@std@@ABV?allocator@G@2@@std@@ABV?codecvt@GDH@6@@Z)

    obj : error LNK2001: unresolved external symbol "void __cdecl boost::filesystem3::path_traits::convert(unsigned short const *,unsigned short const *,class std::basic_string,class std::allocator > &,class std::codecvt const &)" (?convert@path_traits@filesystem3@boost@@YAXPBG0AAV?basic_string@DU?basic\_string@DU?char_traits@D@std@@V?allocator@D@2@@std@@ABV?allocator@D@2@@std@@ABV?codecvt@GDH@5@@Z)

    Ich habe gelesen, dass Qt standardmäßig nicht mit der Option /Zc:wchar_t kompiliert wird und in einem Fall das selbe Problem durch eine Neukompilierung behoben wurde. Nachdem ich das nun versucht habe, bekomme ich aber noch immer diese Fehlermeldungen.

    Ich verwende Visual Studio 2010, Qt 4.7.4, boost 1.47.0, Windows 7 64 bit und entwickle eine 32-bit Anwendung.



  • Wohl nicht gegen Boost Filesystem Lib gelinkt, die ist nicht Header only 😉



  • Doch habe ich. Wenn nicht käme auch die Fehlermeldung, dass die Library fehlt. Es gibt auch kein Problem, wenn ich boost ohne Qt verwende, da tritt der Fehler nicht auf.



  • Wenn nicht käme auch die Fehlermeldung, dass die Library fehlt.

    Das stimmt so leider nicht. Wenn Du dem Linker nichts sagst, dann vermisst er auch keine Lib, nur bei falschen Namen oder falschen Pfad! Er kann dann nur die Symbole nicht auflösen.

    Dann zeig Deine *.pro Datei. Dort fehlt bestimmt sowas wie: LIBS += -L/path/tp/boost -l*boostlib*



  • Ich verwende für boost folgendes Property file: (inzwischen habe ich auf v1.48 aktualisiert)

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ImportGroup Label="PropertySheets" />
      <PropertyGroup Label="UserMacros" />
      <PropertyGroup>
        <IncludePath>$(BOOST_ROOT);$(IncludePath)</IncludePath>
        <LibraryPath>$(BOOST_ROOT)\stage\lib;$(LibraryPath)</LibraryPath>
      </PropertyGroup>
      <ItemDefinitionGroup>
        <Link>
          <AdditionalDependencies>libboost_filesystem-vc100-mt-1_48.lib;%(AdditionalDependencies)</AdditionalDependencies>
        </Link>
        <ClCompile>
          <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
          <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
        </ClCompile>
      </ItemDefinitionGroup>
      <ItemGroup />
    </Project>
    

    Wenn ich die filesystem.lib entferne kommt jedenfalls die Meldung "liboost_filesystem..." konnte nicht gefunden werden.



  • Schau mal hier. Vielleicht doch ein generelles Problem.

    Aber mal was Anderes. Wieso nutzt Du nicht die Filesystemfunktion von Qt, wenn Du die schon benutzt? Ich habe schon einiges von Boost verwendet auch zusammen mit Qt. Aber die Filsystemlib aus Boost habe ich bisher nicht vermisst!



  • Ich möchte die Logik unabhängig von einem GUI Framework entwickeln um später bestimmte Teile meiner eigenen Library ohne unnötige Abhängigkeiten wiederverwenden zu können. Sollte Qt nur mit der Filesystem Library inkompatibel sein, ist es für mich kein Problem diesen Teil umzuschreiben. Ich befürchte aber, dass ich auf weitere Kompitabilitätsprobleme stoßen könnte und möchte diese beheben bevor ich mich in Qt einarbeite.


Anmelden zum Antworten