ubuntu20.04下编译rovio代码报“undefined reference to ‘__glew***‘“
环境: ubuntu20.04, ROS Noetic;
rovio源码,执行
catkin_make
报如下错误:
[ 75%] Building CXX object rovio/CMakeFiles/feature_tracker_node.dir/src/feature_tracker_node.cpp.o
[ 80%] Building CXX object rovio/CMakeFiles/rovio_node.dir/src/rovio_node.cpp.o
[ 85%] Building CXX object rovio/CMakeFiles/rovio_rosbag_loader.dir/src/rovio_rosbag_loader.cpp.o
[ 90%] Linking CXX executable /home/rockeywh/code/rovio/catkin_vio/devel/lib/rovio/feature_tracker_node
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewUniform1f'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewUniform3f'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewShaderSource'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewValidateProgram'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewVertexAttribPointer'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewUseProgram'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewGetProgramiv'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `glewGetErrorString'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewCreateProgram'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewCompileShader'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewGetProgramInfoLog'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewLinkProgram'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewEnableVertexAttribArray'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewActiveTexture'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewBindBuffer'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewBufferData'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewDisableVertexAttribArray'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewGetShaderiv'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewGetUniformLocation'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewGetShaderInfoLog'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewGenBuffers'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewUniformMatrix4fv'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewUniform1i'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewAttachShader'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `__glewCreateShader'
/usr/bin/ld: /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.so: undefined reference to `glewInit'
collect2: error: ld returned 1 exit status
make[2]: *** [rovio/CMakeFiles/feature_tracker_node.dir/build.make:222: /home/rockeywh/code/rovio/catkin_vio/devel/lib/rovio/feature_tracker_node] Error 1
make[1]: *** [CMakeFiles/Makefile2:569: rovio/CMakeFiles/feature_tracker_node.dir/all] Error 2
猜测是glew库链接问题,CMakeLists.txt文件中是添加了glew库的,使用ldd指令查看librovio.so依赖库的情况,返回结果如下:
~$ ldd /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.solinux-vdso.so.1 (0x00007ffd8d7f4000)libopencv_imgproc.so.4.2 => /lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2 (0x00007f3cb1b43000)libyaml-cpp.so.0.6 => /lib/x86_64-linux-gnu/libyaml-cpp.so.0.6 (0x00007f3cb1ae8000)libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007f3cb1a60000)libglut.so.3 => /lib/x86_64-linux-gnu/libglut.so.3 (0x00007f3cb1817000)libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f3cb1636000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f3cb14e7000)libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f3cb14ca000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3cb12d8000)libopencv_core.so.4.2 => /lib/x86_64-linux-gnu/libopencv_core.so.4.2 (0x00007f3cb0f28000)libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007f3cb0e70000)libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007f3cb0e3c000)libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007f3cb0cff000)libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007f3cb0ceb000)libXxf86vm.so.1 => /lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f3cb0ce4000)/lib64/ld-linux-x86-64.so.2 (0x00007f3cb2174000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f3cb0cde000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3cb0cbb000)libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f3cb0c9f000)libtbb.so.2 => /lib/x86_64-linux-gnu/libtbb.so.2 (0x00007f3cb0c59000)libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f3cb0c2d000)libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007f3cb0c18000)libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007f3cb0c12000)libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f3cb0c0a000)libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007f3cb0bf0000)
在返回结果中没有看到glew, 应该就是glew库没有链接上, 自己写了一段测试代码,直接调用glew库,测试glew库是否能够正常调用,判断是库的问题还是代码的问题,测试代码如下:
//#define GLEW_STATIC
#include <iostream>
//#include </home/rockeywh/code/rovio/glew-2.2.0/include/GL/glew.h>
#include <GL/glew.h>
#include <GL/glut.h>
using namespace std;int main ()
{GLenum res = glewInit();if (res != GLEW_OK) {cout << "glewInit failed!!" << endl;} else {cout << "good!!" << endl;}return 0;
}
CMakeLists.txt文件内容如下:
add_compile_options(-std=c++11)
cmake_minimum_required(VERSION 3.0)
project(test)find_package(GLEW REQUIRED)
include_directories(${GLEW_INCLUDE_DIRS})find_package(GLUT REQUIRED)
include_directories(${GLUT_INCLUDE_DIRS})add_executable(test test.cpp)
target_link_libraries(test ${GLUT_LIBRARIES} ${GLEW_LIBRARIES})
代码编译运行正常,没有报错,说明库是没问题的,然后将上面的test.cpp直接复制到rovio/src路径下,并在rovio/CMakeLists.txt文件中添加以下几句代码:
add_executable(test test.cpp)
target_link_libraries(test ${GLEW_LIBRARIES})
执行catkin_make,test.cpp能够编译通过,其余的还是会报上面的错误,对比发现源码中target_link_libraries中用的是 "${GLEW_LIBRARY}"
target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${YamlCpp_LIBRARIES} ${OpenMP_EXE_LINKER_FLAGS} ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} ${GLEW_LIBRARY} ${OpenCV_LIBRARIES})
改成下面这样就能够编译通过不报错
target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${YamlCpp_LIBRARIES} ${OpenMP_EXE_LINKER_FLAGS} ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${GLEW_LIBRARIES} ${OpenCV_LIBRARIES})
这时再使用ldd指令查看librovio.so依赖库的情况,返回结果中就有了glew
rockeywh@rockeyw:~$ ldd /home/rockeywh/code/rovio/catkin_vio/devel/lib/librovio.solinux-vdso.so.1 (0x00007ffe68df5000)libopencv_imgproc.so.4.2 => /lib/x86_64-linux-gnu/libopencv_imgproc.so.4.2 (0x00007fc7eadb3000)libyaml-cpp.so.0.6 => /lib/x86_64-linux-gnu/libyaml-cpp.so.0.6 (0x00007fc7ead58000)libGL.so.1 => /lib/x86_64-linux-gnu/libGL.so.1 (0x00007fc7eacd0000)libglut.so.3 => /lib/x86_64-linux-gnu/libglut.so.3 (0x00007fc7eaa87000)libGLEW.so.2.1 => /lib/x86_64-linux-gnu/libGLEW.so.2.1 (0x00007fc7ea9dd000)libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc7ea7fc000)libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc7ea6ab000)libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc7ea690000)libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc7ea49e000)libopencv_core.so.4.2 => /lib/x86_64-linux-gnu/libopencv_core.so.4.2 (0x00007fc7ea0ee000)libGLdispatch.so.0 => /lib/x86_64-linux-gnu/libGLdispatch.so.0 (0x00007fc7ea036000)libGLX.so.0 => /lib/x86_64-linux-gnu/libGLX.so.0 (0x00007fc7ea002000)libX11.so.6 => /lib/x86_64-linux-gnu/libX11.so.6 (0x00007fc7e9ec3000)libXi.so.6 => /lib/x86_64-linux-gnu/libXi.so.6 (0x00007fc7e9eb1000)libXxf86vm.so.1 => /lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007fc7e9eaa000)/lib64/ld-linux-x86-64.so.2 (0x00007fc7eb3e4000)libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc7e9ea4000)libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc7e9e81000)libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc7e9e65000)libtbb.so.2 => /lib/x86_64-linux-gnu/libtbb.so.2 (0x00007fc7e9e1d000)libxcb.so.1 => /lib/x86_64-linux-gnu/libxcb.so.1 (0x00007fc7e9df3000)libXext.so.6 => /lib/x86_64-linux-gnu/libXext.so.6 (0x00007fc7e9dde000)libXau.so.6 => /lib/x86_64-linux-gnu/libXau.so.6 (0x00007fc7e9dd8000)libXdmcp.so.6 => /lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007fc7e9dd0000)libbsd.so.0 => /lib/x86_64-linux-gnu/libbsd.so.0 (0x00007fc7e9db4000)
原因:可能是与下载glew版本有关,find_package(GLEW REQUIRED)指令找到的变量名为GLEW_LIBRARIES,,,
haha~,不知道自己理解的对不对,不对的还请大家帮忙指正~
另:
开始没想到是glew库链接的问题,还以为是编译器的问题导致的,后来在测试代码中顺便测试了一下这个问题, 使用以下指令编译没有问题
g++ test.cpp -lglut -lGLEW -o test
但如果改成
gcc test.cpp -lglut -lGLEW -o test
就会报如下错误
~/code/text$ gcc text.cpp -lglut -lGLEW -o text
/usr/bin/ld: /tmp/ccxZFg7d.o: in function `main':
text.cpp:(.text+0x24): undefined reference to `std::cout'
/usr/bin/ld: text.cpp:(.text+0x29): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: text.cpp:(.text+0x33): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/usr/bin/ld: text.cpp:(.text+0x3e): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/usr/bin/ld: text.cpp:(.text+0x4e): undefined reference to `std::cout'
/usr/bin/ld: text.cpp:(.text+0x53): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'
/usr/bin/ld: text.cpp:(.text+0x5d): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)'
/usr/bin/ld: text.cpp:(.text+0x68): undefined reference to `std::ostream::operator<<(std::ostream& (*)(std::ostream&))'
/usr/bin/ld: /tmp/ccxZFg7d.o: in function `__static_initialization_and_destruction_0(int, int)':
但是报的好像都是"std::***", 所以如果是编译器问题应该报的是官方预定义的包相关的问题。
ubuntu20.04下编译rovio代码报“undefined reference to ‘__glew***‘“相关推荐
- ubuntu下eclipse运行代码出错undefined reference to ...
错误的主要原因在于eclipse编译的时候找不到静态文件库,具体错误和解决方案如下: 1.编译时出错,undefined reference to '.... 2.定位到mh_sha1_int的头文件 ...
- Ubuntu20.04下编译Aseprite
原文传送门. Aseprite是一款像素画制作软件,不打折时在steam上的售价为 70 元.同时Aseprite也是开源的,并且使用其源代码编译出的软件,若不进行分发,是允许个人进行免费使用的. 本 ...
- Ubuntu20.04下编译测试RocksDB以及遇到的问题记录
rockdb编译 git clone https://github.com/facebook/rocksdb.git //如果上面的命令报错无法连接,则换成下面这句 git clone git://g ...
- Ubuntu20.04下的编译与运行LeGO-LOAM【问题解决】
LeGO-LOAM在Ubuntu20.04下编译和运行的问题 一.OpenCV 版本问题 二.pcl问题 1. C++14环境 2. 报错:'Index' is not a member of 'Ei ...
- 20221218解决在Ubuntu18.04下编译Firefly的Core-3588J出现lz4的问题
20221218解决在Ubuntu18.04下编译Firefly的Core-3588J出现lz4的问题 2022/12/18 15:37 解决方法:编译最新的lz4的dev分支! https://wi ...
- Linux下链接库出现的undefined reference问题总结
1.链接时缺失了相关目标文件(.o) 测试代码如下: 然后编译. 01. gcc -c test.c 02. gcc -c main.c 得到两个.o文件,一个是 main.o,一个是test.o,然 ...
- LeGO-LOAM:Ubuntu20.04下的编译与运行
LeGO-LOAM在Ubuntu20.04下的编译与运行 一.源码及数据集下载 二.安装gtsam 三.建立ROS工作空间 四.LeGO-LOAM的编译 五.LeGO-LOAM的运行 六.可能会遇到的 ...
- linux下编译make文件报错“/bin/bash^M: 坏的解释器,使用grep快速定位代码位置
一.linux下编译make文件报错"/bin/bash^M: 坏的解释器 参考文章:http://blog.csdn.net/liuqiyao_01/article/details/415 ...
- ubuntu20.04静态编译qt5.14.2报错
ubuntu20.04静态编译qt5.14.2报错 collect2: error: ld returned 1 exit status make[3]: *** [Makefile:134: -/- ...
- LIO-SAM:Ubuntu20.04下的编译与运行
LIO-SAM在Ubuntu20.04下的编译与运行 !!阅读须知!! 一.源码及数据集下载 二.LIO-SAM的编译 三.LIO-SAM的运行 四.可能会遇到的问题 1. 运行问题 2. rviz问 ...
最新文章
- Facebook开源图嵌入“神器”:无需GPU,高效处理数十亿级实体图形 | 极客头条...
- 深度分析蔡徐坤的百万流量数据,揭底哪些是假的!
- wince系统改安卓系统_什么是实时操作系统(RTOS)
- 《 Spring1之第二次站立会议(重发)》
- Elasticsearch Suggester搜索建议详解
- bufferedreader接收不到数据_FreeRTOS例程3-串口中断接收不定长的数据与二值信号量的使用
- MaxCompute与OSS非结构化数据读写互通(及图像处理实例)
- 大型布线:Java云应用程序缺少的技术
- 选购光纤交换机时需要注意光模块的哪些配置?
- Java面试技巧—如何自我介绍
- mysql 建模教程 pdf,PowerDesigner 15 系统分析与建模实战 PDF扫描版[50MB]
- Excel LOOKUP 查找不准确的原因
- 程序员面试金典——18.7最长合成字符串
- 搭建ftp_Windows 10搭建FTP服务器!
- Python安装包下载方式
- JavaSE(十一)加密与安全
- 数字验证和table格式(KAYAK)
- Linux驱动学习12(初步认识内存管理)
- ROOK-01 集群简单搭建和卸载
- HTTPHTTPS工作原理