日期:2014-05-16  浏览次数:20877 次

误操作 /usr/bin/ld
求解答,
最近在linux上误操作,执行了如下命令:
sudo cp /home/bizhi/Desktop/libusb-compat-0.1.5/libusb/.libs/libusb.so  /usr/bin/ld
然后执行了 ll  /usr/bin/ld*
lrwxrwxrwx 1 root root       6 2013-05-24 16:56 ld -> ld.bfd*
-rwxr-xr-x 1 root root   49410 2013-06-09 19:34 ld.bfd*
-rwxr-xr-x 1 root root    5279 2011-10-05 06:06 ldd*
-rwxr-xr-x 1 root root 1796268 2011-09-22 21:07 ld.gold*
好像并没有被覆盖掉。
但是我接着用 gcc 或者 g++编译时,就会出现了如下错误
ubuntu:~/test$ gcc a.c -o a
collect2: ld terminated with signal 11 [Segmentation fault]
a.c的源码如下

#include <stdio.h>
#include <stdlib.h>
int main(int argc,char *argv[])
{
  printf("test\n");
  return 0;
}

因为之前gcc和g++是可以用的。不知道是不是由于我的误操作导致的,还是因为其他原因,请帮忙查看一下。谢谢!
GCC Linux Ubuntu

------解决方案--------------------
sudo cp /home/bizhi/Desktop/libusb-compat-0.1.5/libusb/.libs/libusb.so  /usr/bin/ld
你实际上是把libusb.so的内容给了ld -> ld.bfd*即,给了ld.bdf*,那么就是改变了ld.bfd的内容,所以编译通不过。cp就是拷贝,如果你要用libsub.so的链接的话,就改为用mv