我的系统是运行2.6.32的旧NAS . 我发现当对任何后续库使用-static时,它也会尝试静态链接我可能需要的任何其他库 .
当我首先添加-Wl,-Bdynamic标志然后使用-lc显式命名这些库时,例如“-Wl,-Bdynamic -lc -lstdc”,那么它可以工作 . 所以会发生什么是libc和其他人无法静态链接 .
系统上的静态libc称为 /opt/lib/libc_nonshared.a.
/opt/lib/libc.so的内容是这样的:
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( /lib/libc.so.6 /opt/lib/libc_nonshared.a )
gcc版本是4.2.3 . 我面临的当前构建命令在最后添加 -dynamic 但这没有多大帮助 . 当我使用.a名称直接添加一些静态库,而不是使用-l标志时,则没有问题 .
问题似乎是libc的动态库随NAS一起提供,但静态版本位于/ opt / lib中 .
我跑:
gcc hamming.c -static -L. -L/opt/lib -l:matrix.a -o hamming
我明白了:
/opt/lib/gcc/arm-none-linux-gnueabi/4.2.3/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lc
collect2: ld returned 1 exit status
make: *** [hamming] Error 1
当我尝试按原样使用静态libc时 . 如果我执行'hack'将libc_nonshared.a链接到libc.a,它会突然找到它 . 但抱怨:
hamming.c:54: undefined reference to `malloc'
hamming.c:54: undefined reference to `memset'
当然还有其他的错误 . 如上所述,/ opt / libc.so包含对这两个文件的引用(动态和静态) .
对于libstdc,只存在.la文件 .