Ошибка компоновщика при компиляции проектов Autotooled в биткод LLVM

Я следовал инструкциям на http://gbalats.github.io/2015/12/10/compiling-autotooled-projects-to-LLVM-bitcode.html#compiling-llvm-from-source-with-gold-plugin, чтобы попытаться скомпилировать различные проекты, включая coreutils, в LLVM IR.

Я попытался проверить свою установку на Ubuntu 14.04 с помощью Clang 3.4 и простого тестового файла с

clang -flto -fuse-ld=gold -Wl,-plugin-opt=also-emit-llvm test.o

как описано, но это не удалось с

test.o: file not recognized: File format not recognized
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Однако после добавления параметра -B/usr/lib/gold-ld я смог скомпилировать тестовый файл.

Тем не менее, компиляция coreutils завершается со следующей ошибкой:

/usr/lib/gold-ld/ld: error: src/libver.a: no archive symbol table (run ranlib)
/usr/lib/gold-ld/ld: error: lib/libcoreutils.a: no archive symbol table (run ranlib)
/usr/lib/gold-ld/ld: error: lib/libcoreutils.a: no archive symbol table (run ranlib)
/tmp/lto-llvm-dc31af.o:ld-temp.o:function usage: error: undefined reference to 'program_name'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function usage: error: undefined reference to 'quote'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function usage: error: undefined reference to 'program_name'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'set_program_name'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'exit_failure'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'close_stdout'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'parse_user_spec'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'xgetgroups'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'quote'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'parse_user_spec'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'xgetgroups'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'quote'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'Version'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'version_etc'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function main: error: undefined reference to 'quote'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function parse_additional_groups: error: undefined reference to 'xstrdup'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function parse_additional_groups: error: undefined reference to 'xstrtoul'
/tmp/lto-llvm-dc31af.o:ld-temp.o:function parse_additional_groups: error: undefined reference to 'x2nrealloc'

Последняя выполняемая команда:

clang -flto -B/usr/lib/gold-ld  -Wl,--as-needed -flto  -B/usr/lib/gold-ld -fuse-ld=gold -Wl,-plugin-opt=also-emit-llvm  -o src/chroot src/chroot.o src/libver.a lib/libcoreutils.a  lib/libcoreutils.a 

Выполнение llvm-ranlib вручную на libver.a и libcoreutils.a не меняет результат. Выполнение llvm-nm -s src/libver.a печатает следующее:

 D Version

Однако при нормальной сборке вывод будет следующим:

Archive map
Version in version.o

version.o:
00000000 D Version

Есть ли проблема с llvm-ranlib? Есть ли у вас какие-либо предложения о том, как исправить ошибку компоновщика?


person box    schedule 18.12.2015    source источник


Ответы (1)


Вы пробовали онлу ранлиб? Вам нужен llvm-ar (установить (CMAKE_AR llvm-ar)) и, возможно, llvm-nm. llvm-ar вместо ar у меня хорошо работал.

person Olga Krishtal    schedule 16.03.2020