Если у вас есть несколько исходных файлов, вы, вероятно, на самом деле хотите использовать оптимизацию по ссылочному времени для вывода одного файла битового кода для всей программы. Другие ответы приведут к тому, что вы получите файл с битовым кодом для каждого исходного файла.
Вместо этого вы хотите скомпилировать с оптимизацией времени соединения
clang -flto -c program1.c -o program1.o
clang -flto -c program2.c -o program2.o
и для последнего шага связывания добавьте аргумент -Wl, -plugin-opt = Кроме того-emit-llvm
clang -flto -Wl,-plugin-opt=also-emit-llvm program1.o program2.o -o program
Это дает вам как скомпилированную программу, так и соответствующий ей битовый код (program.bc). Затем вы можете изменить program.bc любым удобным вам способом и перекомпилировать измененную программу в любое время, выполнив
clang program.bc -o program
хотя имейте в виду, что на этом шаге необходимо снова включить все необходимые флаги компоновщика (для внешних библиотек и т. д.).
Обратите внимание, что вам нужно использовать золотой компоновщик, чтобы это работало. Если вы хотите заставить clang использовать определенный компоновщик, создайте символическую ссылку на этот компоновщик с именем «ld» в специальной директории с именем «fakebin» где-нибудь на вашем компьютере и добавьте параметр
-B/home/jeremy/fakebin
к любым шагам связывания выше.