Jeśli masz wiele plików źródłowych, prawdopodobnie rzeczywiście chcesz użyć linku-time-optymalizacji wyjście jednego pliku bitcode dla całego programu. Inne podane odpowiedzi spowodują, że skończy się plik bitcodu dla każdego pliku źródłowego.
Zamiast chcesz skompilować z link-czasowej optymalizacji
clang -flto -c program1.c -o program1.o
clang -flto -c program2.c -o program2.o
i na końcowym etapie linkowania, dodać argument -Wl, -plugin-opt = również emitują-llvm
clang -flto -Wl,-plugin-opt=also-emit-llvm program1.o program2.o -o program
To daje zarówno skompilowany program i odpowiadający mu bitcode (program.bc). Następnie można modyfikować program.bc w dowolny sposób, i rekompilacji zmodyfikowanego programu w dowolnym momencie, wykonując
clang program.bc -o program
chociaż należy pamiętać, że trzeba uwzględnić niezbędne flagi łącznikiem (dla zewnętrznych bibliotek, etc) na ten krok ponownie.
Pamiętaj, że musisz użyć złotego linkera, aby to zadziałało.Jeśli chcesz, aby wymusić szczęk do korzystania z konkretnego łącznika, należy utworzyć dowiązania do tego łącznika nazwie „LD” w specjalnym katalogu o nazwie „fakebin” gdzieś na komputerze, a także dodać opcję
-B/home/jeremy/fakebin
do wszelkich krokach łączących powyżej.
Co robi -S tutaj? – meawoppl
@meawoppl: -S jak w gcc mówi, że emituje zespół tekstowy zamiast zmontowanego pliku binarnego –
Ahha. Miałem trudności ze znalezieniem czegokolwiek w dokumentach na ten temat. Można bezpiecznie założyć, że wiele flag w strukturze flagi gcc lustra clang? – meawoppl