undefined symbol的解决记录

一、

  • 看这里说,是链接顺序的问题,于是在CMakeLists里加了这个:
    -Wl,--start-group
    ${PROJECT_SOURCE_DIR}/lib/libngraph.so
    ${PROJECT_SOURCE_DIR}/lib/libinference_engine_legacy.so
    libinference_engine_transformations.so
    ${PROJECT_SOURCE_DIR}/lib/libinference_engine.so
    ${PROJECT_SOURCE_DIR}/lib/libtbb.so.2
    -Wl,--end-group
  • 无效

二、

  • 又看这里说可能是链接时找不到头文件里的声明
  • 参考开始的博文,使用ldd -r显示所有的undefined symbol
  • 再使用c++filt _ZN3tbb8internal13numa_topology4fillEPi定位错误,显示tbb::internal::numa_topology::fill(int*)
  • 使用grep在新机器上没找到,去旧机器复制相应头文件
  • 无效,可能是没复制全,明天再搞哈哈哈

三、解决!

  • 原因:1.编译时和链接时用的动态库不是同一个;2.可执行程序依赖的库的依赖也链接成系统的库了
  • 方法:export LD_LIBRARY_PATH="/home/lwd/ncs/lib:$LD_LIBRARY_PATH"
  • 如果不想改变环境变量,可以看这里

你可能感兴趣的:(C/C++,环境配置,工具,c++)