Ich möchte Nginx mit CFI von LLVM erzwungen kompilieren. Ich ändere das Makefile im Verzeichnis objs. Die Modifikation includs: 1. Änderung des Compilers: cc -> Klirren 2. Parameter add mit CFI bezogen werden: -flto -fvisibility = hidden -fsanitize = cfi Das modifizierte Makefile wird unterSo aktivieren Sie CFI in LLVM
CC = clang
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -flto -fvisibility=hidden -fsanitize=cfi
CPP = cc -E
LINK = $(CC)
Die illusrated Kompilierungsprozess ist bestanden.
/usr/bin/ld: unrecognized option '-plugin'
/usr/bin/ld: use the --help option for usage information
clang-6.0: error: linker command failed with exit code 1 (use -v to see invocation)
Gemäß dem Dokument von Klirren 6.0.0 setzt die CFI Regelungen über Link Zeit-Optimierung (LTO) und dem Linker verwendet werden, müssen unterstützt LTO: Allerdings gibt es einige Fehler während des Verbindungsprozesses gemeldet (wie Gold-Plugin). Es gibt einige Materialien über LTO:
http://llvm.org/docs/GoldPlugin.html
Ich weiß noch nicht, wie man mit diesem Problem umgehen, könnte Jeder geben Sie mir einen Vorschlag machen?
Sie benötigen die Markierung "-fuse-ld = gold". Und installieren Sie natürlich Gold Linker. – arrowd
Thans für Ihre Antwort. Um anderen Neulingen wie mir zu helfen, gebe ich weitere Details: 1. Installiere den Gold-Linker (lade die Binutils (> 2.21.51.0.2) mit ld.bfd). 2. Führen Sie CMake mit -DLLVM_BINUTILS_INCDIR =/pfad/zu/binutils/include (dieser Pfad enthält die Datei plugin-api.h), und machen Sie -j8. Dieser Schritt erzeugt das LLVMgold.so. 3. Kopieren Sie LLVMgold.so nach/usr/local/lib – Rambo
Für die neueste LLVM müssen wir LLVMgold.so nicht nach/usr/local/lib kopieren. Nach der Installation wird die Datei in das Zielverzeichnis (./install_dir/lib) kopiert. – Rambo