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.