Wie kann ich eine Flagge am Ende die Verknüpfung Befehlszeile mit CMake?
Ich habe ein Problem, wo CMake kann nicht erkennen pthread -. Als work-around habe ich versucht:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpthread")
Allerdings, fügt -lpthread
an der falschen Stelle:
/usr/bin/c++ -std=c++11 -D_GNU_SOURCE -Wall [manyflags ...] -lpthread \
CMakeFiles/connectivity_tool.dir/connectivity_tool/conn_tool.cpp.o \
-o connectivity_tool -rdynamic -lboost_system [many libraries...]
Diese Ergebnisse, in:
/usr/bin/ld: /tmp/ccNvRifh.ltrans3.ltrans.o: undefined reference to symbol 'pthread_mutexattr_settype@@GLIBC_2.2.5'
/lib/x86_64-linux-gnu/libpthread.so.0: error adding symbols: DSO missing from command line
Natürlich, die -lpthread
sollte am Ende der 3. Zeile, nicht das Ende des 1.
Wie kann ich entweder immer CMake hinzufügen -lpthread
am Ende dieser Zeile, oder vielleicht sogar das ändern der generierten Makefiles irgendwie in einigen hacky Weg, um diese zu arbeiten?
(Wenn die Antwort beinhaltet eigentlich erkennen pthread richtig dann Antwort auf die verlinkte Frage.)
- Gibt es irgendwelche zusätzlichen
includes
,set(CMAKE_EXE_LINKER_FLAGS ...)
oder package-Referenzen nach Ihrenset()
? Beachten Sie auch: Für die aktuellen standards, die Sie sollten nur geben Sie die Globale-pthread
option. - Es sind, lege ich diese an der Spitze. Lustigerweise, obwohl, mit
-pthread
es zu arbeiten! - Sie müssen diese option (
-pthread
) für die Zusammenstellung und Verknüpfung der Phasen. Froh, dass es scheint, um Ihre Probleme zu lösen (IMHO linker Automatismus). CMake ist manchmal etwas ungeschickt, um die Dinge in der richtigen Reihenfolge :P. ich habe einen Rückgriff auf die manage my build-Systeme mit machen und die mighty mighty Vorlage erstellen " Bewertung von Funktionen vor kurzem. CMake bietet die gleiche mehr oder weniger, aber ich ' ve wurde schlagen unlösbare Fälle (wie die Einbettung CMake generierten Bibliothek listet in der entsprechenden--start-group
/--end-group
Paare)
Du musst angemeldet sein, um einen Kommentar abzugeben.
1. sicher sein, dass Ihre
ist die Letzte gesehen, die im Einklang mit CMake.
Jede weitere Bibliothek/Modul-Verweise (wie z.B.
FIND_BOOST
) Schraube kann sich die Reihenfolge der flags, die Sie wollen, direkt zur Verfügung stellen.Ich würde
und
Ich denke, mit dieser option, wird der linker erkennt automatisch die entsprechende
pthread
Bibliothek verknüpft, die am Ende der linker-Objekte Kette.-lpthread
option nicht helfen, in den cmake-3.11.0 Linux x64 mit gcc 5.4. Verwenden Sie-pthread
stattdessen sowohl für den compiler und den linker an, lösen es für den cmake.