dongfangduoshou123 / DaSiamRPN-Caffe2

Distractor-aware Siamese Networks for Visual Object Tracking Inference in C++ powered by Caffe2
MIT License
41 stars 12 forks source link

未定义的引用 #7

Closed jufeng123 closed 5 years ago

jufeng123 commented 5 years ago

您好,请问我的caffe2编译通过,但在调用时有如下问题,您遇到过吗?

/home/hx/cuda-workspace/Dasiamrpn/Debug/../dasiamrpntracker.cpp:219:对‘typeinfo for caffe2::EnforceNotMet’未定义的引用 /home/hx/cuda-workspace/Dasiamrpn/Debug/../dasiamrpntracker.cpp:220:对‘caffe2::EnforceNotMet::EnforceNotMet(char const, int, char const, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, void const)’未定义的引用 /home/hx/cuda-workspace/Dasiamrpn/Debug/../dasiamrpntracker.cpp:220:对‘typeinfo for caffe2::EnforceNotMet’未定义的引用 /home/hx/cuda-workspace/Dasiamrpn/Debug/../dasiamrpntracker.cpp:242:对‘caffe2::MessageLogger::MessageLogger(char const, int, int)’未定义的引用 /home/hx/cuda-workspace/Dasiamrpn/Debug/../dasiamrpntracker.cpp:242:对‘caffe2::MessageLogger::~MessageLogger()’未定义的引用 /home/hx/cuda-workspace/Dasiamrpn/Debug/../dasiamrpntracker.cpp:306:对‘caffe2::CUDAContext::CUDAContext(int)’未定义的引用 /home/hx/cuda-workspace/Dasiamrpn/Debug/../dasiamrpntracker.cpp:327:对‘caffe2::CUDAContext::CUDAContext(int)’未定义的引用 /home/hx/cuda-workspace/Dasiamrpn/Debug/../dasiamrpntracker.cpp:242:对‘caffe2::MessageLogger::~MessageLogger()’未定义的引用

jufeng123 commented 5 years ago

补充一点,我编译完成后,~/build/lib里面没有protobuf.a,我从其他地方引用了一个,不知道会不会是这里的问题,是不是caffe2里面的CmakeList还有需要需改的地方。

dongfangduoshou123 commented 5 years ago

你用的新版本的caffe2吗?

dongfangduoshou123 commented 5 years ago

DaSiamRPN这个工程也编译通过了吗?请把你用的ide、系统信息也提供一下呀。

jufeng123 commented 5 years ago

我用的是旧版的caffe2,就是在编译DaSiamRPN的时候报的这个错 ubuntu16.04 cuda 9.0 cudnn 7.0 protobuf 3.5.0 python 2.7

jufeng123 commented 5 years ago

IDE 是NSIGHT 9.0

dongfangduoshou123 commented 5 years ago

qt的DaSiamRPNTracker.pro这个工程配置文件中除了unix:!macx: LIBS += -L$$PWD/../../../../usr/local/lib/ -lcaffe2_yolo_ops_gpu(不需要)之外的其他so文件你都引入进你的NSIGHT ide里了吗,看你的编译错误提示 都是‘未定义的引用’,表明有头文件声明,但是具体的实现没有定义,也就是对应的so没引进来。

jufeng123 commented 5 years ago

加了我都添加了,现在的问题是我的这版caffe2编译后,在他的~/build/lib路径下没有生成caffe2_observers.so,protobuf.so,我是从另一个版本的caffe2里引用的这些库,感觉这里可能有问题,能不能给我发下你的caffe2的CmakeList

dongfangduoshou123 commented 5 years ago

make install到系统目录下呀。caffe2_observers.so可能没用到,你的caffe2是有多旧啊这个都没有。

dongfangduoshou123 commented 5 years ago

`cmake_minimum_required(VERSION 3.2 FATAL_ERROR)

cmake_policy(SET CMP0022 NEW)

cmake_policy(SET CMP0023 NEW)

---[ Project and semantic versioning.

project(Caffe2 CXX C)

set(CAFFE2_VERSION_MAJOR 0) set(CAFFE2_VERSION_MINOR 8) set(CAFFE2_VERSION_PATCH 2) set(CAFFE2_VERSION "${CAFFE2_VERSION_MAJOR}.${CAFFE2_VERSION_MINOR}.${CAFFE2_VERSION_PATCH}")

One variable that determines whether the current cmake process is being run

with the main Caffe2 library. This is useful for building modules - if

modules are built with the main Caffe2 library then one does not need to do

find caffe2 in the cmake script. One can usually guard it in some way like

if (NOT CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO)

find_package(Caffe2 REQUIRED)

endif()

set(CAFFE2_CMAKE_BUILDING_WITH_MAIN_REPO ON)

---[ Options.

Note to developers: if you add an option below, make sure you also add it to

cmake/Summary.cmake so that the summary prints out the option values.

include(CMakeDependentOption) option(BUILD_BINARY "Build C++ binaries" ON) option(BUILD_DOCS "Build documentation" OFF) option(BUILD_CUSTOM_PROTOBUF "Build and use Caffe2's own protobuf under third_party" ON) option(BUILD_PYTHON "Build Python binaries" ON) option(BUILD_SHARED_LIBS "Build libcaffe2.so" ON) cmake_dependent_option( CAFFE2_LINK_LOCAL_PROTOBUF "If set, build protobuf inside libcaffe2.so." ON "BUILD_SHARED_LIBS AND BUILD_CUSTOM_PROTOBUF" OFF) cmake_dependent_option( CAFFE2_USE_MSVC_STATIC_RUNTIME "Using MSVC static runtime libraries" ON "NOT BUILD_SHARED_LIBS" OFF) option(BUILD_TEST "Build C++ test binaries (need gtest and gbenchmark)" ON) option(USE_ACL "Use ARM Compute Library" OFF) option(USE_ASAN "Use Address Sanitizer" OFF) option(USE_ATEN "Use ATen" OFF) option(USE_CUDA "Use Cuda" ON) option(USE_FFMPEG "Use ffmpeg" OFF) option(USE_GFLAGS "Use GFLAGS" ON) option(USE_GLOG "Use GLOG" ON) option(USE_GLOO "Use Gloo" ON) option(USE_LEVELDB "Use LEVELDB" ON) option(USE_LITE_PROTO "Use lite protobuf instead of full." OFF) option(USE_LMDB "Use LMDB" ON) option(USE_METAL "Use Metal for iOS build" ON) option(USE_MOBILE_OPENGL "Use OpenGL for mobile code" ON) option(USE_MPI "Use MPI" ON) option(USE_NATIVE_ARCH "Use -march=native" OFF) option(USE_NCCL "Use NCCL" ON) option(USE_NERVANA_GPU "Use Nervana GPU backend" OFF) option(USE_NNAPI "Use NNAPI" OFF) option(USE_NNPACK "Use NNPACK" ON) option(USE_NUMA "Use NUMA (only available on Linux)" ON) option(USE_OBSERVERS "Use observers module." OFF) option(USE_OPENCV "Use openCV" ON) option(USE_OPENMP "Use OpenMP for parallel code" OFF) option(USE_PROF "Use profiling" OFF) option(USE_REDIS "Use Redis" OFF) option(USE_ROCKSDB "Use RocksDB" OFF) option(USE_SNPE "Use Qualcomm's SNPE library" OFF) option(USE_TENSORRT "Using Nvidia TensorRT library" OFF) option(USE_ZMQ "Use ZMQ" OFF) option(USE_ZSTD "Use ZSTD" OFF)

---[ CMake scripts + modules

list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Modules)

if (MSVC AND ${BUILD_SHARED_LIBS}) set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) endif()

---[ CMake build directories

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

enable_testing()

---[ Misc checks to cope with various compiler modes

include(cmake/MiscCheck.cmake) include(cmake/BuildVariables.cmake)

External projects

include(ExternalProject)

TODO: merge the following 3 files into cmake/public/utils.cmake.

include(cmake/Utils.cmake) include(cmake/public/utils.cmake)

set(CAFFE2_WHITELIST "" CACHE STRING "A whitelist file of files that one should build.")

Set default build type

if(NOT CMAKE_BUILD_TYPE) message(STATUS "Build type not set - defaulting to Release") set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build from: Debug Release RelWithDebInfo MinSizeRel Coverage." FORCE) endif()

---[ Dependencies

include(cmake/Dependencies.cmake)

---[ Whitelist file if whitelist is specified

include(cmake/Whitelist.cmake)

---[ Set link flag, handle additional deps for gcc 4.8 and above

if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_CXX_COMPILER_VERSION VERSION_GREATER 4.8.0 AND NOT ANDROID) message(STATUS "GCC ${CMAKE_CXX_COMPILER_VERSION}: Adding gcc and gcc_s libs to link line") list(APPEND Caffe2_DEPENDENCY_LIBS gcc_s gcc) endif()

---[ Build flags

set(CMAKE_C_STANDARD 99) set(CMAKE_CXX_STANDARD 11) if(NOT MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -fPIC") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-narrowing")

Eigen fails to build with some versions, so convert this to a warning

Details at http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1459

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-partial-specialization") else() foreach(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) if (${CAFFE2_USE_MSVC_STATIC_RUNTIME}) if(${flag_var} MATCHES "/MD") string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") endif(${flag_var} MATCHES "/MD") else() if(${flag_var} MATCHES "/MT") string(REGEX REPLACE "/MT" "/MD" ${flag_var} "${${flag_var}}") endif() endif() set(${flag_var} "${${flag_var}} /MP /bigobj") endforeach(flag_var) endif()

if(ANDROID) if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -s") else() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s") endif() endif()

if(NOT APPLE AND UNIX) list(APPEND Caffe2_DEPENDENCY_LIBS dl) endif()

Prefix path to Caffe2 headers.

If a directory containing installed Caffe2 headers was inadvertently

added to the list of include directories, prefixing

PROJECT_SOURCE_DIR means this source tree always takes precedence.

include_directories(BEFORE ${PROJECT_SOURCE_DIR})

Prefix path to generated Caffe2 headers.

These need to take precedence over their empty counterparts located

in PROJECT_SOURCE_DIR.

include_directories(BEFORE ${PROJECT_BINARY_DIR})

---[ Old caffe protobuf.

add_subdirectory(caffe/proto)

---[ Main build

add_subdirectory(caffe2)

Documentation Option

if(BUILD_DOCS)

check if Doxygen is installed

find_package(Doxygen) if (DOXYGEN_FOUND) message("Generating documentation")

set(DOXYGEN_C_IN ${CMAKE_CURRENT_SOURCE_DIR}/docs/caffe2/.Doxyfile-c)
set(DOXYGEN_C_OUT ${CMAKE_CURRENT_SOURCE_DIR}/docs/caffe2/Doxyfile-c)
set(DOXYGEN_P_IN ${CMAKE_CURRENT_SOURCE_DIR}/docs/caffe2/.Doxyfile-python)
set(DOXYGEN_P_OUT ${CMAKE_CURRENT_SOURCE_DIR}/docs/caffe2/Doxyfile-python)

if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/docs)
  file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/docs)
endif (EXISTS ${CMAKE_CURRENT_BINARY_DIR}/docs)

file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docs)
configure_file(${DOXYGEN_C_IN} ${DOXYGEN_C_OUT} @ONLY)
configure_file(${DOXYGEN_P_IN} ${DOXYGEN_P_OUT} @ONLY)

add_custom_target(doc_doxygen_c ALL
    COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_C_OUT}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    COMMENT "Generating C++ API documentation with Doxygen"
    VERBATIM)

add_custom_target(doc_doxygen_python ALL
    COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_P_OUT}
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    COMMENT "Generating Python API documentation with Doxygen"
    VERBATIM)

else (DOXYGEN_FOUND) message(FATAL_ERROR "Doxygen needs to be installed to generate the documentation") endif (DOXYGEN_FOUND) endif (BUILD_DOCS)

---[ CMake related files

Uninistall option.

if(NOT TARGET caffe2_uninstall) configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cmake_uninstall.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake IMMEDIATE @ONLY)

add_custom_target(caffe2_uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif()

---[ Make configuration files for cmake to allow dependent libraries

easier access to Caffe2.

if ((NOT USE_GLOG) OR (NOT USE_GFLAGS) OR BUILD_CUSTOM_PROTOBUF) message(WARNING "Generated cmake files are only fully tested if one builds " "with system glog, gflags, and protobuf. Other settings may " "generate files that are not well tested.") endif()

if (USE_CUDA)

TODO: check if we should include other cuda dependency libraries

to the interface as well.

endif()

Note(jiayq): when building static libraries, all PRIVATE dependencies

will also become interface libraries, and as a result if there are any

dependency libraries that are not exported, the following install export

script will fail. As a result, we will only provide the targets cmake

files for shared lib installation. For more info, read:

https://cmake.org/pipermail/cmake/2016-May/063400.html

if (BUILD_SHARED_LIBS) configure_file( ${PROJECT_SOURCE_DIR}/cmake/Caffe2ConfigVersion.cmake.in ${PROJECT_BINARY_DIR}/Caffe2ConfigVersion.cmake @ONLY) configure_file( ${PROJECT_SOURCE_DIR}/cmake/Caffe2Config.cmake.in ${PROJECT_BINARY_DIR}/Caffe2Config.cmake @ONLY) install(FILES ${PROJECT_BINARY_DIR}/Caffe2ConfigVersion.cmake ${PROJECT_BINARY_DIR}/Caffe2Config.cmake DESTINATION share/cmake/Caffe2 COMPONENT dev) install(FILES ${PROJECT_SOURCE_DIR}/cmake/public/cuda.cmake ${PROJECT_SOURCE_DIR}/cmake/public/glog.cmake ${PROJECT_SOURCE_DIR}/cmake/public/gflags.cmake ${PROJECT_SOURCE_DIR}/cmake/public/protobuf.cmake ${PROJECT_SOURCE_DIR}/cmake/public/threads.cmake ${PROJECT_SOURCE_DIR}/cmake/public/utils.cmake DESTINATION share/cmake/Caffe2/public COMPONENT dev) install(EXPORT Caffe2Targets DESTINATION share/cmake/Caffe2 FILE Caffe2Targets.cmake COMPONENT dev) else() message(WARNING "Generated cmake files are only available when building " "shared libs.") endif()

---[ Modules

add_subdirectory(modules)

---[ Binaries

Binaries will be built after the Caffe2 main libraries and the modules

are built. For the binaries, they will be linked to the Caffe2 main

libraries, as well as all the modules that are built with Caffe2 (the ones

built in the previous Modules section above).

if (BUILD_BINARY) add_subdirectory(binaries) endif()

include(cmake/Summary.cmake) caffe2_print_configuration_summary()`

jufeng123 commented 5 years ago

我的caffe2就是用的你下面链接给的那个,0.8.1的,缺的文件又从官方下载补充了一下

jufeng123 commented 5 years ago

我大概发现问题了,链接中的caffe2_old,对很多组件进行了删减,能不能将您使用的caffe2压缩上传一下

dongfangduoshou123 commented 5 years ago

链接: https://pan.baidu.com/s/1ZUOB59EZ8wpnsMPjFunEBw 提取码: txu7