无法编译静态程序

时间:2014-05-29 15:41:41

标签: gcc cross-compiling

我正在尝试为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 ..

2 个答案:

答案 0 :(得分:3)

在Fedora 19和20上,要静态编译C程序,您需要安装包glibc-develglibc-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"