muupan / dqn-in-the-caffe

An implementation of Deep Q-Network using Caffe

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Linking problems

mcmachado opened this issue · comments

Hello,

I'm trying to compile your code (I changed the absolute paths on the CMakeLists.txt and I download/compiled your Caffe code). When the makefile starts to link, I get the following error:

Undefined symbols for architecture x86_64:
  "caffe::Net<float>::blob_by_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      dqn::DQN::Initialize() in dqn.cpp.o
  "caffe::Net<float>::layer_by_name(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      dqn::DQN::Initialize() in dqn.cpp.o
      dqn::DQN::Update() in dqn.cpp.o
  "caffe::Net<float>::CopyTrainedLayersFrom(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      dqn::DQN::LoadTrainedModel(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in dqn.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [dqn] Error 1
make[1]: *** [CMakeFiles/dqn.dir/all] Error 2
make: *** [all] Error 2

I don't know how I can solve this problem. If it helps, my CMakeLists.txt file is below:

cmake_minimum_required (VERSION 2.6)
project(dqn)

option(CPU_ONLY "Use CPU only for Caffe" ON)
option(USE_CUDNN "Use cuDNN for Caffe" OFF)
option(USE_SDL "Use SDL for ALE" ON)

#caffe/caffe.hpp
include_directories(~/Research/caffe-dqn/include)
#ale_interface.hpp
include_directories(~/Research/ALE_dev/src)

link_directories(~/Research/caffe-dqn/build/lib)
link_directories(~/Research/ALE_dev/)
if(USE_CUDNN)
  link_directories(~/cudnn-6.5-linux-R1)
endif()

add_executable(dqn dqn_main.cpp dqn.cpp)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -march=native")

target_link_libraries(dqn caffe)
target_link_libraries(dqn glog)
target_link_libraries(dqn gflags)
target_link_libraries(dqn ale)

if(APPLE)
  #cblas.h
  include_directories(/System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/Headers)
endif()

if(USE_SDL)
  add_definitions(-D__USE_SDL)
  if(APPLE)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -framework Cocoa")
    target_link_libraries(dqn sdl)
    target_link_libraries(dqn sdl_gfx)
    target_link_libraries(dqn sdl_image)
    target_link_libraries(dqn sdlmain)
  else()
    target_link_libraries(dqn SDL)
    target_link_libraries(dqn SDL_gfx)
    target_link_libraries(dqn SDL_image)
    target_link_libraries(dqn SDLmain)
  endif()
endif()

if(NOT CPU_ONLY)
  include_directories(/usr/local/cuda-6.5/targets/x86_64-linux/include)
endif()

if(CPU_ONLY)
  add_definitions(-DCPU_ONLY)
endif()

if(USE_CUDNN)
  target_link_libraries(dqn cudnn)
endif()

Thanks in advance.