奇怪的错误:未定义引用`class :: class()'

时间:2016-05-31 07:03:35

标签: c++ compiler-errors linker cmake undefined

我有一个图书馆irWGN依赖于另一个图书馆irRNG。

我的CMakeFiles.txt&#39>如下。一个是src / signals是

add_library(irRNG irRNG.cpp)
add_library(irWGN irWGN.cpp)

和主要的CMakeFile

include_directories(${SRC}/signals)
SET(MY_LIB
  ${MY_LIB}
  irRNG
  irWGN
  )
....

foreach(file2link ${FILES_to_RUN})

  target_link_libraries(${file2link}
    ${catkin_LIBRARIES}
    ${Boost_LIBRARIES}
    ${gsl_LIBRARIES}
    ${OpenCV_LIBRARIES}
    ${MY_LIB}
    )
   add_dependencies(${file2link} project_generate_messages_cpp)
endforeach(file2link)

收到此错误

./devel/lib/libirWGN.so: undefined reference to `irRNG::irRNG()'
../devel/lib/libirWGN.so: undefined reference to `irRNG::~irRNG()'

奇怪的是我在ubuntu 12.04上使用它没有任何问题。只是现在才出现这个问题。

1 个答案:

答案 0 :(得分:1)

由于问题在于你的irWGN取决于你的irRNG,解决你的问题最优雅的方法是添加:

   grep -q 123 fileName && grep -q ABC fileName && echo "Matched" || echo "not matched"
    Matched
    grep -q 123 fileName && grep -q ABQQC fileName && echo "Matched" || echo "not matched"
    not matched
    grep -q 1ZZ23 fileName && grep -q ABC fileName && echo "Matched" || echo "not matched"
    not matched
   grep -q 1ZZ23 fileName && grep -q ABCQQ fileName && echo "Matched" || echo "not matched"
    not matched

在库之间创建相互依赖关系。它也适用于静态库!因此,如果您尝试将可执行文件链接到irWGN,则cmake将自动链接到irRNG,并且顺序正确。