Linux swap 空间不足导致编译Clang失败 ERROR: make collect2: ld terminated with signal 9

本文记录了在Linux环境下因Swap空间不足导致Clang编译失败的问题及解决方案。作者在配置较低(8G内存)的联想笔记本上尝试编译Clang,遇到了Swap空间不足的错误。通过增加Swap文件大小,最终成功完成编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux swap 空间不足导致编译Clang失败


环境介绍

  • 联想笔记本电脑
  • i5处理器
  • 128G硬盘空间
  • 8G内存
  • Linux Mint 18.2

目标

Windows下编译Clang已经成功,为考虑代码兼容性,在Linux也需要编译Clang及libclang。

执行编译

按照官方Get Start所写分别 checkout 了 llvm和clang两个项目,具体参考Getting Started: Building and Running Clang.

a、用cmake创建项目

一切顺利

b、执行make

遭遇错误:
ERROR: make collect2: ld terminated with signal 9

根据上面的错误信息,得知是Linux swap空间不足导致编译失败。在编译时调用如下命令也可以观察到8G内存被爆:

$free -m
//显示memory和swap的使用情况

由于所有硬盘空间已经被分区并使用,所以使用物理分区做swap区会比较麻烦,因此使用Linux提供swap相关命令

//进入用户目录
cd ~

//在用户目录下创建swapfile文件
dd if=/dev/zero  of=swapfile  count=4096  bs=1024k
dd if=/dev/zero of=/tmp/mem.swap bs=1M count=4096
//if 表示输入文件 /dev/zero表示一个空文件,即以null字符写入文件中。
//of 表示输出文件
//bs 每个块多少个字节,可以带单位
//count 表示多少个块
//这样就创建4G的一个空文件

//当然根据bs指定的大小不同,我们也可以通过下面的文件增加:
dd if=/dev/zero of=/tmp/mem.swap bs=1M count=4096 (增加4G)
//或
dd if=/dev/zero of=swapfile bs=1024 count=1048576  (增加1G) 

//挂载swap分区文件
sudo swapon swapfile

//关闭swap设备或文件
swapoff  swapfile

c、make install

只要硬盘空间够,这里不会出现问题。

总结

以前总觉得Linux下 8G内存不需要再开swap分区,但遇到Clang之后发现,时代在进步,8G已经快成为历史。

另外,编译Clang对于硬盘空间的占用真是疯狂,其build目录占用了近47G,由此推断,128G的工作空间也够呛了。


<think>嗯,用户遇到了在Linux环境下编译失败的问题,而且提示与pip无关。我需要根据提供的引用资料来找出解决方案。首先,用户排除了pip的问题,所以应该关注其他编译相关的错误。 引用[3]提到了一些编译TensorFlow时的常见问题及解决方法,虽然用户可能不是在编译TensorFlow,但其中的通用步骤可能适用。比如检查错误日志、依赖项、权限、路径设置、缓存问题、编译器版本和系统资源。这些都是常见的编译问题来源。 另外,引用[1]中的依赖关系冲突和权限不足也可能导致编译失败,需要确保所有依赖库都正确安装且版本兼容。权限问题可以通过使用sudo或调整目录权限来解决。引用[4]中的符号链接问题也可能影响路径的正确性,需要检查相关路径是否存在。 用户可能需要具体查看编译时的错误信息,比如是否缺少头文件、库文件,或者编译器版本不兼容。例如,GCC版本过低可能导致某些代码无法编译。还有内存不足的情况,可以考虑使用交换分区。 总结来说,解决方案应包括检查错误日志、安装依赖、解决权限问题、设置环境变量、清理缓存、更新编译器、检查系统资源以及处理符号链接问题。最后,建议用户根据具体错误信息进一步排查,或提供更多细节以便更精准的解答。</think>### Linux编译错误解决方案(非pip问题) #### 1. **检查编译错误日志** - **定位错误根源**:编译错误通常伴随明确的错误提示(如缺少头文件、库文件或语法错误)。查看终端输出的错误信息,重点关注`error:`或`fatal error:`后的内容。 - **示例**: ```bash /usr/include/stdio.h:28:10: fatal error: bits/libc-header-start.h: No such file or directory ``` 此类错误可能因缺少系统开发库导致[^3]。 #### 2. **安装缺失的开发依赖** - **系统级依赖**:若错误涉及系统头文件或库(如`glibc`、`openssl`等),需安装对应的开发包。 - **Ubuntu/Debian**: ```bash sudo apt-get install build-essential libssl-dev zlib1g-dev ``` - **Red Hat/CentOS**: ```bash sudo yum groupinstall "Development Tools" sudo yum install openssl-devel zlib-devel ``` #### 3. **权限问题处理** - **编译目录权限**:确保当前用户对编译目录有读写权限。若涉及系统目录(如`/usr/local`),需使用`sudo`或调整权限: ```bash sudo chown -R $USER /usr/local ``` #### 4. **环境变量与路径配置** - **库路径设置**:若错误提示找不到库文件(如`.so`或`.a`文件),需通过`LD_LIBRARY_PATH`指定路径: ```bash export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH ``` - **符号链接修复**:若库文件存在但链接失效,可手动创建符号链接(类似引用[4]的方法): ```bash ln -s /path/to/actual/libfile.so /path/to/expected/libfile.so ``` #### 5. **清理编译缓存** - **重置编译状态**:若之前编译失败残留临时文件,可能导致后续编译异常。执行: ```bash make clean # 适用于Makefile项目 rm -rf build # 若使用CMake等构建工具 ``` #### 6. **编译器版本兼容性** - **检查GCC/Clang版本**:部分项目要求特定编译器版本。通过`gcc --version`查看当前版本,若过低需升级: ```bash sudo apt-get install gcc-11 # Ubuntu示例 ``` #### 7. **系统资源限制** - **内存不足问题**:大型项目编译可能因内存不足失败。可增加交换分区(Swap): ```bash sudo fallocate -l 2G /swapfile sudo mkswap /swapfile sudo swapon /swapfile ``` --- ### 相关问题 1. **如何通过错误日志快速定位编译问题?** (答案需结合日志分析工具如`grep`、`tail`等) 2. **Linux系统中如何管理多版本编译器?** (答案可涉及`update-alternatives`或环境变量切换) 3. **编译时出现&ldquo;undefined reference”错误如何解决?** (需解释链接阶段的库依赖问题) 4. **如何为特定项目定制编译选项(如优化级别、调试符号)?** (涉及`CFLAGS`、`CXXFLAGS`等环境变量或Makefile修改) --- ### 引用说明 以上方法参考了Linux系统编译问题的通用解决思路[^3],并结合了权限管理与环境配置的实践经验[^1][^4]。若需进一步排查,建议提供具体错误信息以便针对性分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值