我正在通过 CMake 构建一个 3rd Party 应用程序,并将 -DCMAKE_BUILD_TYPE=MinSizeRel 传递给 CMake 以尝试解决此问题,但这不起作用。
在链接方面,我总是以错误告终。
/usr/lib/gcc/armv7a-hardfloat-linux-gnueabi/4.9.3/../../../../armv7a-hardfloat-linux-gnueabi/bin/ld: fatal error: clientserver: mmap: failed to allocate 791230396 bytes for output file: Cannot allocate memory
Run Code Online (Sandbox Code Playgroud)
构建此的 PC 具有 1gb RAM 和 6gb SWAP。尝试释放大量物理内存被证明是困难的,那么有没有办法让链接器使用 SWAP 或限制它使用的内容?
我也切换到 ld.gold 只是为了看看这是否有任何好处,但仍然没有运气。不幸的是,添加更多 RAM 不是一种选择。
不是理想的解决方案,但是在 ld 的帮助手册和几天内的一些实验中,我自己发现了一个解决方案。
我将 /usr/bin/ld 重命名为 /usr/bin/ld.old(最终是 ld.gold 的符号链接),然后我创建了一个名为 /usr/bin/ld 的 shell 脚本,它简单地称为 /usr/bin/ ld.old 并强制通过一些额外的参数。
--no-map-whole-file --no-keep-memory --no-keep-files-mapped
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题,这与 32/64 位分配无关,而是链接器无法找到足够空间的事实。是的,上述选项会增加 I/O 使用量而不是内存,但事实仍然是它确实有效。
| 归档时间: |
|
| 查看次数: |
2202 次 |
| 最近记录: |