我有一个虚拟的Debian系统,我用它来开发.
今天我想试试llvm/clang.
安装clang后,我无法编译我的旧c项目(使用gcc).这是错误:
...
/usr/bin/ld: cannot find crt1.o: No such file or directory
/usr/bin/ld: cannot find crti.o: No such file or directory
collect2: ld returned 1 exit status
...
Run Code Online (Sandbox Code Playgroud)
我卸载了clang,它仍然无法正常工作.
有谁知道如何解决这个问题?
Dmi*_*nko 81
问题是你可能只有当前架构的gcc而且是64位.您需要32位支持文件.为此,您需要安装它们
sudo apt install gcc-multilib
Run Code Online (Sandbox Code Playgroud)
小智 62
帮助我的是创建一个符号链接:
sudo ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
Run Code Online (Sandbox Code Playgroud)
Shi*_*nok 35
看来,当你玩llvm/clang时,你(或包管理器)删除了以前现有的标准C库开发包(例如 Debian上的eglibc),或者你可能没有首先安装它,因此你需要重新安装它,现在你又回到了gcc.
你可以在Debian上这样做:
aptitude show libc-dev
Run Code Online (Sandbox Code Playgroud)
Ubuntu的:
apt-get install libc-dev
Run Code Online (Sandbox Code Playgroud)
在Ubuntu上,如果你没有libc-dev,因为我在packages.ubuntu.com上找不到它,你可以尝试直接安装libc6-dev.
或者在Redhat之类的系统上:
yum安装glibc-devel
注意:虽然你在评论中简要回答过,但这里有一个答案,所以有一个记录,以防有人遇到这个,可能正在寻找答案,但不是在评论或评论不够明确的他们.
Uma*_*r R 26
这是在启动板中报告的BUG,但有一个解决方法:
运行此命令以查看这些文件的位置
$ find /usr/ -name crti*
/usr/lib/x86_64-linux-gnu/crti.o
Run Code Online (Sandbox Code Playgroud)
然后将此路径添加到LIBRARY_PATH变量
$ export LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
jer*_*iah 17
如果您正在使用Debian的测试版本,称为'wheezy',那么您可能会被移动到multiarch.更多关于Debian的multiarch:http://wiki.debian.org/Multiarch
基本上,正在发生的事情是各种体系结构特定的库正在从文件系统中的传统位置移动到新的体系结构特定位置.这/usr/bin/ld
就是混淆的原因.
你会在现在/usr/lib64/
和/usr/lib/i386-linux-gnu/
现在找到crt1.o,你需要告诉你的工具链.这里有一些关于如何做到这一点的文件; http://wiki.debian.org/Multiarch/LibraryPathOverview
请注意,仅创建符号链接只会为您提供一个架构,而您实际上将禁用multiarch.虽然这可能是您想要的,但它可能不是最佳解决方案.
ale*_*exm 15
在阅读了jeremiah发布的http://wiki.debian.org/Multiarch/LibraryPathOverview之后,我发现了没有符号链接的gcc标志:
gcc -B/usr/lib/x86_64-linux-gnu hello.c
Run Code Online (Sandbox Code Playgroud)
因此,您只需-B/usr/lib/x86_64-linux-gnu
在Makefile中添加CFLAGS变量即可.
要使RHEL 7 64位编译gcc 4.8 32位程序,您需要做两件事.
确保完全安装了所有32位gcc 4.8开发工具:
sudo yum install glibc-devel.i686 libgcc.i686 libstdc++-devel.i686 ncurses-devel.i686
Run Code Online (Sandbox Code Playgroud)使用-m32标志编译程序
gcc pgm.c -m32 -o pgm
Run Code Online (Sandbox Code Playgroud)从这里偷来的:如何在64位RHEL上编译32位应用程序? - 我只需要做第1步.
这对我的 Ubuntu 16.04 有用
$ LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
$ export LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
221351 次 |
最近记录: |