SOCI Library und CMake

Zhavok

Neues Mitglied
Verwendet einer von euch die Soci-Lib mit CMake? Und vielleicht auch unter Windows? Ich bekommen es einfach nicht hin, etwas damit zu kompilieren.

Ich builde Soci so:

Code:
cmake -S . -B build -DWITH_BOOST=OFF ^ - DSOCI_SQLITE3=ON ^ -DSQLITE3_INCLUDE_DIR=%sqlite_include_dir% ^ -DSQLITE3_LIBRARY=%sqlite_library_path%\libsqlite3.lib
Code:
cmake --build build
Mein CMakeScript sieht so aus:
Code:
cmake_minimum_required(VERSION 3.17)

project(SqliteTest)

add_executable(SqliteTest)
add_subdirectory(src)

find_package(Soci)
target_include_directories(SqliteTest PUBLIC "C:/CPP/Additional Includes/soci/include")
target_include_directories(SqliteTest PUBLIC "C:/CPP/Additional Includes/SQLite3/include")
list(APPEND LIBS ${SOCI_LIBRARY} ${SOCI_sqlite3_PLUGIN})
target_link_libraries(SqliteTest PUBLIC ${LIBS})
Leider bekomme ich dann folgenden Fehler beim linken:
Code:
Microsoft (R)-Build-Engine, Version 16.5.0+d4cbfca49 für .NET Framework
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.

  Checking Build System
  Building Custom Rule C:/CPP/Projects/SqliteTest/CMakeLists.txt
  main.cpp
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __cdecl soci::session::session(class soci::backend_factory const &,class std::basic_string<char,struct std::ch
ar_traits<char>,class std::allocator<char> > const &)" (??0session@soci@@QEAA@AEBVbackend_factory@1@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)" in Funktion "main". [C
:\CPP\Projects\SqliteTest\build\SqliteTest.vcxproj]
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: __cdecl soci::session::~session(void)" (??1session@soci@@QEAA@XZ)" in Funktion "main". [C:\CPP\Projects\Sqlite
Test\build\SqliteTest.vcxproj]
main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __cdecl soci::session::close(void)" (?close@session@soci@@QEAAXXZ)" in Funktion "main". [C:\CPP\Projects\
SqliteTest\build\SqliteTest.vcxproj]
main.obj : error LNK2001: Nicht aufgelöstes externes Symbol ""struct soci::sqlite3_backend_factory const soci::sqlite3" (?sqlite3@soci@@3Usqlite3_backend_factory@1@B)". [C:\CPP\Projects\Sqlite
Test\build\SqliteTest.vcxproj]
C:\CPP\Projects\SqliteTest\build\Debug\SqliteTest.exe : fatal error LNK1120: 4 nicht aufgelöste Externe [C:\CPP\Projects\SqliteTest\build\SqliteTest.vcxproj]
Weiß da jemand weiter?
 

german

Aktives Mitglied
devCommunity-Experte
Verwendet einer von euch die Soci-Lib mit CMake?
Nee leider nicht. Hab auch nicht viel Erfahrung mit make und noch weniger mit cmake.
Deine Fehler sind alle Linkerfehler, so viel kann ich sehen.

Vielleicht nicht die Ursache, aber vielleicht hilfts irgendwie.
cmake -S . -B build -DWITH_BOOST=OFF ^ - DSOCI_SQLITE3=ON ^ -DSQLITE3_INCLUDE_DIR=%sqlite_include_dir% ^ -DSQLITE3_LIBRARY=%sqlite_library_path%\libsqlite3.lib
- Ich verstehe die Carets (^) in deiner Kommandozeile nicht. Was sollen die tun?
- - DSOCI_SQLITE3 Leerzeichen zwischen - und D?
- Enthalten die Variablen mit den Pfaden Leer- oder Sonderzeichen (wie &)?

Die .obj Dateien werden alle erstellt?
 

Zhavok

Neues Mitglied
Sry, dass ich erst jetzt antworte. Hatte die letzten Tage viel Stress.

Eigentlich sind da ursprünglich Zeilenumbrüche drin, aber da ich es nur mit dem Smartphone gepostet habe sind die verschwunden. Deshalb die Carets.

In CMake gibt es das D als Prefix wenn man Variablen direkt beim Aufruf setzt. Das passt soweit.

Die Pfade beinhaltet Leerzeichen, allerdings übergebe ich sie in "". Das sollte funktionieren. CMake meckert auch nicht wegen der Syntax. Die Lib an sich kann ich auch bauen. Nur mein Projekt leider nicht
 

german

Aktives Mitglied
devCommunity-Experte
In CMake gibt es das D als Prefix wenn man Variablen direkt beim Aufruf setzt.
Ich weiß, aber du hast zwischen - und D ein Leerzeichen. Das passt dann nicht mehr. Kann aber auch ein Copypasta Fehler sein ;)

Die Lib an sich kann ich auch bauen. Nur mein Projekt leider nicht
Naja, wie gesagt, der Linker meckert. Scheint ansonsten alles zu kompilieren, zumindest sehe ich keine Fehlermeldungen dahingehend. Darum die Frage ob alle Objektdateien da sind.
 

Zhavok

Neues Mitglied
Ja, das Leerzeichen kommt vom Kopieren. War halt blöd mit dem Smartphone^^. Also das builden der Lib funktioniert. Objektdateien finde ich keine. Ich werde aber wahrscheinlich eh das Thema abschließen. Ich habe nun 6 Tage damit verbracht diese Lib hinzuzufügen. Es ist absolut unverhältnismäßig. Vielen Dank trotzdem für die Hilfe. Falls ich es durch einen dummen Zufall trotzdem schaffen sollte, ergänze ich hier eine Antwort wie es funktioniert :)
 
Oben Unten