【问题标题】:CPU_ONLY build: compiling the function Forward() gives error "undefined reference..."CPU_ONLY 构建:编译函数 Forward() 给出错误“未定义的引用...”
【发布时间】:2018-04-15 08:19:09
【问题描述】:

我是 Caffe 库的初学者。 我只是在本教程示例中编译和测试代码:https://github.com/DeepLearningStudy/caffe/blob/master/examples/ex4_layer/main.cpp。 我有一个 CPU_ONLY 构建,所以编译给出了错误 undefined reference to `void caffe::caffe_gpu_dot(int, double const*, double const*, double*)' 。 通过调用函数 Forward() 发出。 为了完成编译,我修改了 argmax 层代码并将 forward_cpu() 作为公共函数成员。

尽管有一行: Caffe::set_mode(Caffe::CPU) 似乎是对 gpu 方法的前向函数调用。

这是我的 CMakeLists.txt : cmake_minimum_required(VERSION 2.8.8)

项目(hellocaffe)

如果(开启) 如果(不是 OpenCV_FOUND) 设置(Caffe_OpenCV_CONFIG_PATH “/usr/share/OpenCV”) 如果(Caffe_OpenCV_CONFIG_PATH) get_filename_component(Caffe_OpenCV_CONFIG_PATH ${Caffe_OpenCV_CONFIG_PATH} ABSOLUTE)

 if(EXISTS ${Caffe_OpenCV_CONFIG_PATH} 而不是目标 opencv_core)
    消息(状态“Caffe:使用来自 ${Caffe_OpenCV_CONFIG_PATH} 的 OpenCV 配置”)
    包括(${Caffe_OpenCV_CONFIG_PATH}/OpenCVModules.cmake)
  万一()

别的()
  find_package(需要 OpenCV)
万一()
未设置(Caffe_OpenCV_CONFIG_PATH)

endif() endif()

计算路径

get_filename_component(Caffe_CMAKE_DIR "/home/nikfio/bin/caffe/cmake" 路径)

FIND_PACKAGE(Caffe)

设置(Caffe_INCLUDE_DIRS /home/nikfio/bin/caffe/include) list(APPEND Caffe_INCLUDE_DIRS "/usr/include") 列表(APPEND Caffe_INCLUDE_DIRS“/usr/local/cuda-9.0/include”) list(APPEND Caffe_INCLUDE_DIRS "/usr/include/opencv") list(APPEND Caffe_INCLUDE_DIRS "/usr/include/atlas") list(APPEND Caffe_INCLUDE_DIRS "/home/nikfio/bin/caffe/build/src/")

include_directories(${Caffe_INCLUDE_DIRS})

定义

set(Caffe_DEFINITIONS "-DUSE_OPENCV;-DUSE_LMDB;-DUSE_LEVELDB")

设置(CAFFE_DIR /home/nikfio/bin/caffe)

set(LIBRARY -L${CAFFE_DIR}/build/lib -L/usr/local/Cellar/opencv/2.4.11_1/lib/ -lglog -lprotobuf -lpython2.7 -lcaffe -lm -lpthread -lopencv_core - lopencv_imgproc -lopencv_highgui)

add_executable(ex_logreg_mnist ex_logreg_mnist.cpp)

target_link_libraries(ex_logreg_mnist ${LIBRARY} -lboost_system)

有人知道原因或有更好的解决方案吗?

问候

【问题讨论】:

标签: c++ caffe


【解决方案1】:

在您的定义行中添加以下内容:

set(Caffe_DEFINITIONS "-DUSE_OPENCV;-DUSE_LMDB;-DUSE_LEVELDB;-DCPU_ONLY=1")

CPU_ONLY=1 应该正确注释掉所有 GPU 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 2013-12-25
    相关资源
    最近更新 更多