2017-08-16 2 views
0

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?

+0

Sie benötigen die Markierung "-fuse-ld = gold". Und installieren Sie natürlich Gold Linker. – arrowd

+0

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

+0

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

Antwort

0

Um andere Neuling wie mir zu helfen, gebe ich mehr Details:

  1. den Gold-Linker installieren (Festlegung der binutils laden (> 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 für die vorherige LLVM-Version LLVMgold.so nach/usr/local/lib. 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.