【问题标题】:error while compiling libhand examples编译 libhand 示例时出错
【发布时间】:2014-04-09 13:03:58
【问题描述】:

我正在尝试编译 libhand 的示例,但得到以下输出:

/usr/bin/ld: /usr/local/lib/libOgreMainStatic.a(OgreDynLib.cpp.o): undefined reference to symbol 'dlopen@@GLIBC_2.1'
/usr/bin/ld: note: 'dlopen@@GLIBC_2.1' is defined in DSO /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libdl.so so try adding it to the linker command line
/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/libdl.so: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
make[2]: *** [bend_one_finger] Error 1
make[1]: *** [CMakeFiles/bend_one_finger.dir/all] Error 2
make: *** [all] Error 2

当我尝试使用来自libhand example 的方向编译我自己的示例时,也会发生同样的事情。我相信这与libhand的配置文件(LibHandConfig.cmake)有关。

当我将它构建为 libhand 的一部分时,相同的示例编译得很好,当我尝试将 libhand 作为包使用时会出现问题(使用 cmake 的 FIND_PACKAGE() )

【问题讨论】:

  • 是否有-ldl 链接器标志?运行 make VERBOSE=1 并查看确切的链接器行。
  • pastebin.com/sMqckmsj 这是输出

标签: compilation cmake libhand


【解决方案1】:

不是一个完整的答案,而只是迈向:

尝试在收到make 错误之后发出以下命令:

/usr/bin/c++ CMakeFiles/example.dir/example.cc.o  -o example -rdynamic -ldl -lXt /path/libs/libHand/hand_cpp/dist/libhand_hog.a /path/libs/libHand/hand_cpp/dist/libhand_renderer.a /path/libs/libHand/hand_cpp/dist/libhand_utils.a -lopencv_core -lopencv_flann -lopencv_imgproc -lopencv_highgui -lopencv_features2d -lopencv_calib3d -lopencv_cudaarithm -lopencv_cudawarping -lopencv_ml -lopencv_objdetect -lopencv_cuda -lopencv_cudafilters -lopencv_cudaimgproc -lopencv_video -lopencv_legacy -lopencv_cudaoptflow -lopencv_photo -lopencv_videostab -lopencv_ts -lopencv_cudacodec -lopencv_ocl -lopencv_superres -lopencv_cudafeatures2d -lopencv_nonfree -lopencv_stitching -lopencv_softcascade -lopencv_shape -lopencv_optim -lopencv_cudastereo -lopencv_cudabgsegm -lopencv_contrib -lopencv_bioinspired /path/libs/libHand/hand_cpp/dist/libdot_sceneloader.a /path/libs/libHand/hand_cpp/dist/libtinyxml.a /usr/local/lib/libOgreMainStatic.a -lzzip -lz -lfreeimage -lfreetype -lSM -lICE -lX11 -lXext -lXaw -lXrandr -ltbb /usr/local/lib/OGRE/libRenderSystem_GLStatic.a -lGLU -lGL /usr/local/lib/libOgreMainStatic.a -lzzip -lz -lfreeimage -lfreetype -lSM -lICE -lX11 -lXext -lXaw -lXrandr -ltbb /usr/local/lib/OGRE/libRenderSystem_GLStatic.a -lGLU -lGL /usr/local/lib/OGRE/libPlugin_OctreeSceneManagerStatic.a -ldl

如果成功,则必须手动将 -ldl 添加到库列表的 end (target_link_libraries(example ${SOME_LIBS} ${OTHER_LIBS} -ldl))。似乎 LibOGRE 的配置部分有点不正确(它没有包含一个库 libdl 以不小心链接应用程序。

【讨论】:

  • 最后我也必须添加 -lXt,但这就是解决方案。非常感谢!
  • 这导致我将“;-ldl -lXt”附加到 LibHand-export-noconfig.cmake:44 行的末尾,以便它也可以与 make 一起使用
  • 我无法构建 hand_cpp。我收到错误:[100%] [100%] 构建 CXX 对象源/CMakeFiles/pose_designer.dir/pose_designer_main.cc.o 构建 CXX 对象源/CMakeFiles/pose_designer.dir/pose_designer.cc.o 链接 CXX 可执行文件pose_designer /usr /bin/ld: 找不到 -lNOTFOUND /usr/bin/ld: 找不到 -lNOTFOUND libhand_utils.a(file_dialog.cc.o): 在函数libhand::FileDialog::TkExec(std::string const&)': /home/krr/shome/libhand/libhand-public-master/hand_cpp/source/file_dialog.cc:91: warning: the use of mktemp' 很危险,最好使用mkstemp' or mkdtemp'。你遇到过吗?
猜你喜欢
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多