2014-12-15 2 views
0

Я только что построил и установил LLVM Clang 3.5.0 с compiler-rt. лязг двоичная, кажется, работает, но не может построить простую тестовую программу:LLVM не может найти clang двоичный

$ cat hello.c 
#include <stdio.h> 
int main(int argc, char **argv) { 
    printf("Hello World\n"); 
    return 0; 
} 

Строительство он borks с error: unable to execute command: Executable "" doesn't exist!

$ clang hello.c -o hello 
error: unable to execute command: Executable "" doesn't exist! 

Executable ""? Интересно, что ...

Отладка еще раз показывает, что кланг пытается называть себя, чтобы построить объектный файл .o, а затем ld связать его, но не знает, где он, по-видимому, существует.

$ clang -### hello.c -o hello 
clang version 3.5.0 (tags/RELEASE_350/final) 
Target: x86_64-alpine-linux-musl 
Thread model: posix 
"" "-cc1" "-triple" "x86_64-alpine-linux-musl" "-emit-obj" "-mrelax-all" "-disable-free" "-main-file-name" "hello.c" "-mrelocation-model" "static" "-mdisable-fp-elim" "-fmath-errno" "-masm-verbose" "-mconstructor-aliases" "-munwind-tables" "-fuse-init-array" "-target-cpu" "x86-64" "-target-linker-version" "2.24" "-dwarf-column-info" "-resource-dir" "../lib/clang/3.5.0" "-internal-isystem" "/usr/local/include" "-internal-isystem" "../lib/clang/3.5.0/include" "-internal-externc-isystem" "/include" "-internal-externc-isystem" "/usr/include" "-fdebug-compilation-dir" "/" "-ferror-limit" "19" "-fmessage-length" "158" "-mstackrealign" "-fobjc-runtime=gcc" "-fdiagnostics-show-option" "-o" "/tmp/hello-37746e.o" "-x" "c" "hello.c" 
"/usr/bin/ld" "-z" "relro" "--eh-frame-hdr" "-m" "elf_x86_64" "-dynamic-linker" "/lib/ld-musl-x86_64.so.1" "-o" "hello" "/usr/bin/../lib/gcc/x86_64-alpine-linux-musl/4.8.3/../../../crt1.o" "/usr/bin/../lib/gcc/x86_64-alpine-linux-musl/4.8.3/../../../crti.o" "/usr/bin/../lib/gcc/x86_64-alpine-linux-musl/4.8.3/crtbegin.o" "-L/usr/bin/../lib/gcc/x86_64-alpine-linux-musl/4.8.3" "-L/usr/bin/../lib/gcc/x86_64-alpine-linux-musl/4.8.3/../../../../x86_64-alpine-linux-musl/lib" "-L/usr/bin/../lib/gcc/x86_64-alpine-linux-musl/4.8.3/../../.." "-L/../lib" "-L/lib" "-L/usr/lib" "/tmp/hello-37746e.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "/usr/bin/../lib/gcc/x86_64-alpine-linux-musl/4.8.3/crtend.o" "/usr/bin/../lib/gcc/x86_64-alpine-linux-musl/4.8.3/../../../crtn.o" 

Когда я запускаю первую строку кладя /usr/bin/clang как первый элемент, он строит просто отлично:

$ /usr/bin/clang "-cc1" "-triple" "x86_64-alpine-linux-musl" "-emit-obj" "-mrelax-all" "-disable-free" "-main-file-name" "hello.c" "-mrelocation-model" "static" "-mdisable-fp-elim" "-fmath-errno" "-masm-verbose" "-mconstructor-aliases" "-munwind-tables" "-target-cpu" "x86-64" "-target-linker-version" "2.24" "-dwarf-column-info" "-resource-dir" "../lib/clang/3.5.0" "-internal-isystem" "/usr/local/include" "-internal-isystem" "../lib/clang/3.5.0/include" "-internal-externc-isystem" "/include" "-internal-externc-isystem" "/usr/include" "-fdebug-compilation-dir" "/" "-ferror-limit" "19" "-fmessage-length" "158" "-mstackrealign" "-fobjc-runtime=gcc" "-fdiagnostics-show-option" "-o" "/tmp/hello-4f64bb.o" "-x" "c" "hello.c" 
$ 

И следующий /usr/bin/ld способен связать его просто отлично в результате:

$ ./hello 
Hello World 

Anny предлагает, что я винил во время настройки/сборки?

+0

Так как Вы приобрели эту сборку звоном? В какой операционной системе вы работаете? С чем происходит «что clang»? –

+0

Я сам его построил. Я на _Alpine Linux 3.1_. '' ', которые clang''' сообщает' ''/usr/bin/clang'''. – smoku

ответ

2

Анализ источника clang показывает, что программа clang в Linux использует /proc/self/exe, чтобы узнать реальный путь его двоичного кода. Я запускаю chroot без/proc, поэтому он не прошел.

mount -t proc proc /proc 

решает проблему

Смежные вопросы