由于 gcc 编译器版本不受支持,Caffe 编译失败

2024-02-25

我挣扎着Caffe http://caffe.berkeleyvision.org/汇编。不幸的是我没能编译它。

Steps http://caffe.berkeleyvision.org/installation.html#cmake-compilation我跟着:

git clone https://github.com/BVLC/caffe.git
cd caffe
mkdir build
cd build
cmake ..
make all

Running make all失败并显示以下错误消息:

[  2%] Building NVCC (Device) object src/caffe/CMakeFiles/cuda_compile.dir/util/cuda_compile_generated_im2col.cu.o
In file included from /usr/include/cuda_runtime.h:59:0,
                 from <command-line>:0:
/usr/include/host_config.h:82:2: error: #error -- unsupported GNU version! gcc 4.9 and up are not supported!
 #error -- unsupported GNU version! gcc 4.9 and up are not supported!
  ^
CMake Error at cuda_compile_generated_im2col.cu.o.cmake:207 (message):
  Error generating /mydir/caffe/build/src/caffe/CMakeFiles/cuda_compile.dir/util/./cuda_compile_generated_im2col.cu.o

软件版本:

  • OS: Debian.
  • gcc版本:5.3.1.
  • nvcc版本:6.5.12.
  • cat /proc/driver/nvidia/version result:
NVRM version: NVIDIA UNIX x86_64 Kernel Module  352.63  Sat Nov  7 21:25:42 PST 2015
GCC version:  gcc version 4.8.5 (Debian 4.8.5-3) 

尝试解决问题

1st try

简单的解决方案通常是最好的解决方案,所以(按照建议here https://devtalk.nvidia.com/default/topic/516939/cuda4-1-gcc-4-6/)我试图注释掉宏检查gcc版本来自/usr/include/host_config.h(第 82 行)。不幸的是它不起作用并且编译严重失败:

1 catastrophic error detected in the compilation of "/tmp/tmpxft_000069c2_00000000-4_im2col.cpp4.ii".

2nd try

我尝试运行:

cmake -D CMAKE_CXX_COMPILER=g++-4.8 ..
make

但它失败了exactly相同的错误消息(即使g++-4.8应该被接受)。

3rd try

我找到了类似的问题 https://stackoverflow.com/questions/28009785/cuda-6-5-complains-about-not-supporting-gcc-4-9-what-to-do(虽然不相关Caffe),我尝试按照已接受的答案中的建议解决它。

我做了什么:

  1. 我跑了grep -iR "find_package(CUDA" caffe命令并发现Cuda.cmake https://github.com/BVLC/caffe/blob/master/cmake/Cuda.cmake文件有find_package(CUDA 5.5 QUIET)排队225 https://github.com/BVLC/caffe/blob/master/cmake/Cuda.cmake#L225.
  2. I added set(CUDA_HOST_COMPILER /usr/bin/gcc-4.8) to Cuda.cmake https://github.com/BVLC/caffe/blob/master/cmake/Cuda.cmake,行前行:find_package(CUDA 5.5 QUIET).
  3. 我删除了所有内容build目录并运行cmake and make再次 - 有和没有-D CMAKE_CXX_COMPILER=g++-4.8.

不幸的是结果是完全相同的。 Caffe 可能会以某种方式覆盖它 - 我没弄清楚how.

make VERBOSE=1 2>&1 | grep -i compiler-bindir什么也不返回。

有什么有趣的,make VERBOSE=1打印失败的命令,即:

/usr/bin/nvcc -M -D__CUDACC__ /mydir/caffe/src/caffe/util/im2col.cu -o /mydir/caffe/build/src/caffe/CMakeFiles/cuda_compile.dir/util/cuda_compile_generated_im2col.cu.o.NVCC-depend -ccbin /usr/bin/cc -m64 -DUSE_LMDB -DUSE_LEVELDB -DUSE_OPENCV -DWITH_PYTHON_LAYER -DGTEST_USE_OWN_TR1_TUPLE -Xcompiler ,\"-fPIC\",\"-Wall\",\"-Wno-sign-compare\",\"-Wno-uninitialized\",\"-O3\",\"-DNDEBUG\" -gencode arch=compute_20,code=sm_21 -Xcudafe --diag_suppress=cc_clobber_ignored -Xcudafe --diag_suppress=integer_sign_change -Xcudafe --diag_suppress=useless_using_declaration -Xcudafe --diag_suppress=set_but_not_used -Xcompiler -fPIC -DNVCC -I/usr/include -I/mydir/caffe/src -I/usr/include -I/mydir/caffe/build/include -I/usr/include/hdf5/serial -I/usr/include/opencv -I/usr/include/atlas -I/usr/include/python2.7 -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/mydir/caffe/include -I/mydir/caffe/build

当我添加--compiler-bindir /usr/bin/gcc-4.8手动标记,它打印错误:

nvcc fatal   : redefinition of argument 'compiler-bindir'

这可能与this https://cmake.org/Bug/view.php?id=13674错误报告。

Edit:我没注意到--compiler-bindir and -ccbin是相同的选项,并且后者已经在上面失败的命令中设置。当我改变的时候-ccbin /usr/bin/cc to -ccbin /usr/bin/gcc-4.8在上面失败的命令中,它成功完成。现在我需要在 Caffe 的 CMake 文件中找到覆盖的选项-ccbin在所有后续 Caffe 的 CMake 中。看着cmake/Cuda.cmake:252:list(APPEND CUDA_NVCC_FLAGS ${NVCC_FLAGS_EXTRA}似乎是个好方法。


我怎样才能成功完成我的编译?任何帮助表示赞赏。

相关问题:

  • host_config.h:不支持的 GNU 版本!不支持 4.9 之后的 gcc 版本. https://stackoverflow.com/questions/33886654/host-config-hunsupported-gnu-version-gcc-versions-later-than-4-9-are-not-suppo
  • CUDA 6.5 抱怨不支持 gcc 4.9 - 该怎么办?. https://stackoverflow.com/questions/28009785/cuda-6-5-complains-about-not-supporting-gcc-4-9-what-to-do

cmake -D CUDA_NVCC_FLAGS="-ccbin gcc-4.8" .. && make causes 编译成功.


现在另一个问题出现了:链接谷歌的libgflags or libprotobuf失败可能是因为它是用较新的版本编译的gcc版本,但与提出的问题无关。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于 gcc 编译器版本不受支持,Caffe 编译失败 的相关文章

  • 有没有办法将 fopen_s() 与 GCC 一起使用,或者至少创建一个 #define ?

    MSVC 编译器说fopen 已弃用 建议使用fopen s 有什么办法可以使用吗fopen s 并且仍然便携 任何想法 define 微软的 s函数是不可移植的 我通常使用等效的 C89 C99 函数并禁用弃用警告 define CRT
  • C 中类似函数的宏定义

    我想定义一个像 MACRO 这样的函数 IE define foo x if x gt 32 x else 2 x endif 那是 if x gt 32 then foo x present x else foo x present 2
  • 从 CUDA 设备写入输出文件

    我是 CUDA 编程的新手 正在将 C 代码重写为并行 CUDA 新代码 有没有一种方法可以直接从设备写入输出数据文件 而无需将数组从设备复制到主机 我假设如果cuPrintf存在 一定有地方可以写一个cuFprintf 抱歉 如果答案已经
  • 软件预取手动指令合理的场景

    我读过有关 x86 和 x86 64 Intel 的内容gcc提供特殊的预取指令 include
  • typeof() 表达式内的副作用

    在 GNUC C 中 您可以使用typeof expression 并且使用内部带有副作用的表达式是合法的 例如 您可以使用以下 C 代码 int x 0 typeof x y 在这种情况下 副作用被忽略 并且 x 之后仍然为零 这是有道理
  • __device__ __constant__ 常量

    有什么区别吗 在 CUDA 程序中定义设备常量的最佳方法是什么 在 C 主机 设备程序中 如果我想将常量定义在设备常量内存中 我可以这样做 device constant float a 5 constant float a 5 问题 1
  • c - 将 .data 发送到不同的部分

    我想把其中的符号 data为特定 C 文件生成的节并将它们放在不同的节中 例如 mydata 在最终的可执行文件中 例如 normaldata c char my str this should appear in data special
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在
  • 如何在 Caffe 的网络中出现多次损失?

    如果我在网络中定义多个损失层 从这些末端到网络的开头是否会发生多个反向传播 我的意思是 他们真的是这样工作的吗 假设我有这样的事情 Layer1 Layer2 Layer n Layer cls1 bottom layer n top cl
  • 为什么 ld 无法从 /etc/ld.so.conf 中的路径找到库?

    我想添加 opt vertica lib64进入系统库路径 所以我执行以下步骤 1 添加 opt vertica lib64 into etc ld so conf 然后运行ldconfig 2 检查 bash ldconfig p gre
  • 什么定义了类型的大小?

    ISO C 标准规定 sizeof char lt sizeof short lt sizeof int lt sizeof long 我在 BIT Linux mint 19 1 上使用 GCC 8 大小为long int is 8 我正
  • BASH 脚本编译多个 C++ 文件 - OpenCV

    请参见在C 和OpenCV中调用其他文件中的函数 https stackoverflow com questions 24442836 call functions in other files in c and opencv 对于最初的问
  • 使用 g++ 从 cpp 文件和静态库创建共享库 [重复]

    这个问题在这里已经有答案了 就像标题所说 我想从三个 cpp 文件和一些静态库创建共享库 基本上我想这样做 g libProject so file1 cpp file2 cpp file3 cpp I usr local include
  • 为什么 GCC 交叉编译不构建“crti.o”?

    在尝试为arm构建gcc 4 x x交叉编译器时 我陷入了缺失的困境crti o文件在 BUILD DIR gcc子目录 An strace在顶层Makefile表明编译后的xgcc正在调用交联器ld with crti o 作为一个论点
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • CPU Relax 指令和 C++11 原语

    我注意到许多使用特定于操作系统的原语实现的无锁算法 例如所描述的自旋锁here http locklessinc com articles locks 使用 Linux 特定的原子原语 经常使用 cpurelax 指令 使用 GCC 可以通
  • 这个反斜杠在这段汇编代码中起什么作用?

    我不确定这些推线有什么区别 修剪下来来自 Linux 的 x86 entry calling h https github com torvalds linux blob 241e39004581475b2802cd63c111fec43b
  • 使用 mingw32 在 Windows 上构建 glew 时“DllMainCRTStartup@12”的多个定义

    我关注了这个主题 使用 mingw 使建筑物在 Windows 上闪闪发光 https stackoverflow com questions 6005076 building glew on windows with mingw 6005
  • Ubuntu 11.10 上的 c 数学链接器问题 [重复]

    这个问题在这里已经有答案了 我从 Ubuntu 升级后出现了一些奇怪的错误 10 11 11 04 i dont know 到 11 10 我正在得到一个undefined reference to sqrt 使用 math h 时并与 l
  • 包括带有大量全局变量的 C 头文件

    我有一个包含 100 多个全局变量的包含文件 它正在库中使用 但我链接库的一些程序也需要访问全局变量 它的构建方式 In one library c file define Extern In the programs that use t

随机推荐

  • 使用 Android 设备将实时视频流发送到 wowza 流引擎

    我想将实时视频流从我的 Android 设备发送到 wowza 流引擎 我在此使用示例blog http www walking productions com notslop 2013 01 16 android live streami
  • 使用 IServiceProvider 获取会话服务

    我需要使用 IServiceProvider 访问 ASP NET Core 1 0 中的 ConfigureService 方法中的会话变量 我有一个使用委托 lambda 表达式初始化的服务 可以从任何地方返回值 在此上下文中 此 la
  • Java中的动态方法调度[重复]

    这个问题在这里已经有答案了 以下是关于我的疑问的代码片段 class A void someMethod A param System out println A class C extends A void someMethod C pa
  • 仅使用 Java.IO 从文件读取/写入字节

    在 Java 中 我们如何将字节数组写入文件 并从该文件中读回 是的 我们都知道已经有很多这样的问题 但由于完成这项任务的方法有很多 所以它们变得非常混乱和主观 因此 让我们缩小问题的范围 Domain 安卓 Java 我们想要什么 快 尽
  • 如何删除默认标记?

    我正在使用 Google Map API V3 我注意到这里有很多标记 尽管我不需要它们 例如 一些学校或其他地方 点击时会出现InfoWindows 有什么办法可以删除它们还是不可能 地图上唯一应该显示的标记是您自己添加的标记 愿意分享您
  • SimpleAudioEngine Cocos2d 内存泄漏

    I am running Instruments and it indicates that the SimpleAudioEngine is leaking memory The screenshot is attached The me
  • 如何从 ASP.NET Web 服务生成 JSONP 以进行跨域调用?

    我编写了一个返回 JSON 的 Web 服务 并尝试使用 jQuery 调用它 如下所示 ajax contentType application json charset utf 8 url http examplewebsite com
  • 保护 Java 中的 REST API [已关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在 Java 中使用 Jersey 构建 REST API 我想使用 API 令牌安全方案来保护敏感
  • Mercurial中如何重复合并分支

    我们在工作中使用 Mercurial 我希望有一个类似于我使用 SVN 的设置 Trunk Tags 生产 Branches 由于 Mercurial 本身支持分支 因此我知道如何创建命名分支 但我找不到任何有关如何重复合并 Trunk 与
  • 如何在 recyclerView 向下滚动时折叠后隐藏工具栏

    如何在recyclerView向下滚动时折叠后隐藏工具栏 在recyclerView向上滚动时显示工具栏 并在列表末尾展开CollapsingToolbarLayout 现在 CollapsingToolbarLayout 只是折叠 工具栏
  • 如何从类路径加载属性文件? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions getResourceAsStrea
  • 在 django 中使用 Pre_delete 信号

    在我的应用程序中 我想跟踪所有正在删除的问题 所以我在我的模型文件中创建了一个类 表 class Deleted models Model question models IntegerField null True blank True
  • MySQL:从 sql 脚本文件在事务内执行 LOAD 语句

    我想从一些 csv 文件加载我的表格 我希望所有数据导入都是事务绑定的 即 如果任何数据导入中发生错误 其他表中加载的所有记录也会回滚 load 语句是从如下所示的 sql 文件执行的 SET AUTOCOMMIT 0 START TRAN
  • 带分类器的 Ivy 检索

    我有以下内容ivy xml
  • 如何给AutoHotkey脚本添加管理员权限?

    我将其编译为可执行文件 但要打开它 我必须右键单击并按 以管理员身份运行 我希望它每次运行时都请求管理员权限 但该怎么做呢 我不能这样做 因为当我将其复制到第二台计算机时它不起作用 尝试将其添加到自动执行部分 脚本顶部 If the scr
  • Ruby(猴子修补数组)

    我在猴子修补数组类时遇到问题 这项作业有8 specs被满足 我只会向您提供我遇到问题的部分的 RSpec 和书面要求 因为其他一切似乎都通过了 以下是 Array Class Monkey 补丁的书面要求 写一个新的new map的实例上
  • Flex 布局混合行和列

    我可以使用这个布局float容易地 但很难处理弹性盒 css a background red float left width 30 height 100px b c background green overflow hidden he
  • Asp.Net MVC + CSLA + DDD 可能吗

    前几天 我被要求审查一个基于 ASP NET MVC CSLA DDD 域驱动设计 的系统 该系统的第一个版本是基于ASP NET MVC CSLA 第二个版本是在此基础上添加了 DDD 原因是 嗯 我不知道是什么 当我查看两种不同架构的图
  • Anaconda Navigator 无法创建新环境

    我在工作中需要使用Python 今天刚刚安装了Anaconda Navigator 我可以毫无问题地打开 Navigator GUI 我可以打开 创建新环境 提示 我填写详细信息并点击 确定 导航器在基本 根 选项卡下为我请求的环境创建一个
  • 由于 gcc 编译器版本不受支持,Caffe 编译失败

    我挣扎着Caffe http caffe berkeleyvision org 汇编 不幸的是我没能编译它 Steps http caffe berkeleyvision org installation html cmake compil