Heim >Backend-Entwicklung >C++ >Warum kann CMake meine freigegebene Bibliothek nicht finden, wenn „link_directories' verwendet wird?
CMake stößt auf Schwierigkeiten beim Auffinden einer Bibliothek mithilfe von „link_directories“
Beim Versuch, eine gemeinsam genutzte Bibliothek, libprotobuf.so, mithilfe von „link_directories“ von CMake zu verknüpfen Beim Ausführen eines Befehls stößt ein Benutzer auf Linkerfehler, die auf undefinierte Verweise auf Funktionen in der Bibliothek hinweisen. Obwohl sich die Bibliothek im angegebenen Verzeichnis befindet, kann CMake sie nicht finden.
Die Lösung
Das Problem ergibt sich aus der Reihenfolge, in der die CMake-Befehle innerhalb platziert werden CMakeLists.txt-Datei. Der Befehl „link_directories“ muss vor dem Befehl „add_executable“ und nicht vor dem Befehl „target_link_libraries“ aufgerufen werden.
Erklärung
„add_executable“ erstellt ein ausführbares Ziel, während „link_directories“ angibt, welche Verzeichnisse ausgeführt werden sollen nach gemeinsam genutzten Bibliotheken durchsucht werden. Durch Platzieren des Befehls „link_directories“ nach dem Befehl „add_executable“ kann CMake die Bibliothek nicht finden, wenn versucht wird, die ausführbare Datei zu verknüpfen.
Geänderte CMakeLists.txt
link_directories(/usr/lib/x86_64-linux-gnu) add_executable(test main.cpp) target_link_libraries(test protobuf)
Sobald die Reihenfolge der Befehle korrigiert ist, findet CMake erfolgreich die Bibliothek libprotobuf.so und die Linker erzeugt keine undefinierten Referenzfehler mehr.
Das obige ist der detaillierte Inhalt vonWarum kann CMake meine freigegebene Bibliothek nicht finden, wenn „link_directories' verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!