我正在尝试为ARM构建一个交叉编译器,并且没有成功使用Clang和LLVM,要做太多事情要让我的机器做它的事情。 所以,我去了LinuxKD的网页,让clang和LLVM正确构建,我已经完成了它们的工作...... 所以,我回到同一个站点,(LinuxKD)找出如何为ARM构建交叉编译器,它使用“Crosstool-ng”,这对我很好..我已经加载了一个比以前版本更好的版本网站,他使用crosstool-ng-1.12.0,我使用的是crosstool-ng-1.19.0 ...... 因此,它在设置之后开始做它的事情,但它带有以下错误:
[DEBUG] Checking that gcc can compile a trivial statically linked program (CT_WANTS_STATIC_LINK)
[DEBUG] You may need to ensure that static libraries such as libc.a are installed on your system
[DEBUG] ==> Executing: 'x86_64-build_unknown-linux-gnu-gcc' '-O2' '-g' '-pipe' '/home/cctools/arm/.build/arm-unknown-eabi/build/test.c' '-static' '-o' '/home/cctools/arm/.build/arm-unknown-eabi/build/.gccout'
[DEBUG] /usr/bin/ld: cannot find -lc
[ERROR] collect2: error: ld returned 1 exit status
[ERROR]
[ERROR] >>
[ERROR] >> Build failed in step 'Checking that gcc can compile a trivial statically linked program (CT_WANTS_STATIC_LINK)'
[ERROR] >> called in step '(top-level)'
[ERROR] >>
[ERROR] >> Error happened in: CT_DoExecLog[scripts/functions@257]
[ERROR] >> called from: main[scripts/crosstool-NG.sh@540]
[ERROR] >>
我的系统是Fedora 20,在I7华硕上运行.. 它声明/ usr / bin / ld:找不到-lc ,, 是-lc程序还是Ld程序的子指令,还是别的什么? 或者我错过了一个程序?像Glibc这样的东西,我有最新的Fedora 20 Linux ..
答案 0 :(得分:3)
在Fedora 19和20上,要静态编译C程序,您需要安装包glibc-devel
和glibc-static
。
sudo yum install glibc-devel glibc-static
表明它之后的工作:
cat > hello.c <<'EOF'
#include <stdio.h>
int main(int argc, char **argv)
{
puts("Hello, world.");
return 0;
}
EOF
gcc -o hello hello.c -static
ldd hello
./hello
应打印:
not a dynamic executable
Hello, world.
答案 1 :(得分:0)
在我的案例中,-lc
链接步骤中的错误是由于libc.a
是32位ELF,因此无法链接64位编译对象。
check it with:<br>
"#file {build_path}/x86_64-linux-gnu/sysroot/usr/lib/libc.a" or<br>
"#file {build_path}/x86_64-linux-gnu/sysroot/usr/lib/libc.so"