无法在 QT Creator 上编译 Pangolin
Cannot compile Pangolin on QT Creator
我是 pangolin 的新手,正在尝试在 Qt Creator 上编译穿山甲的 'hello world' 代码。我在编译时遇到了 运行 这个 "undefined reference" 问题。我的代码很简单:
#include <iostream>
#include <pangolin/pangolin.h>
using namespace std;
int main()
{
pangolin::CreateWindowAndBind("Main",640,480);
return 0;
}
我的 .pro 文件如下所示:
QT += core
QT -= gui
TARGET = hellopangolin
CONFIG += c++11
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += /home/mavbot/Pangolin/include /home/mavbot/Pangolin/build/src/include
LIBS += -L "/home/mavbot/Pangolin/build/src"
-lpangolin \
LIBS += -lGLEW \
-lGL \
-lEGL
我已经成功地编译和构建了穿山甲库作为示例程序 运行 在我的 system.I 运行 示例的可执行文件上顺利地找到了依赖库和试图在 QT Creator 中 link 它们。我也是 OpenGL 的新手。我 运行 的错误是:
错误:未定义对 `pangolin::CreateWindowAndBind(std::__cxx11::basic_string, std::allocator >, int, int, pangolin::Params常量&)'
我构建穿山甲如下:
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j8
编辑 2:根据 Botje 的建议,在库路径之后插入 / 有助于编译。但是现在我有一个 运行 时间错误:
/home/mavbot/Documents/qtcodes/build-hellopangolin-Desktop-Debug/hellopangolin:加载共享库时出错:libpangolin.so:无法打开共享对象文件:没有这样的文件或目录
编辑 3:
-rwxrwxr-x 1 mavbot mavbot 2333648 3 月 10 日 23:55 /home/mavbot/Pangolin/build/src/libpangolin.so
linux-vdso.so.1 => (0x00007ffedc5b8000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007f05e3401000)
libGLEW.so.1.13 => /usr/lib/x86_64-linux-gnu/libGLEW.so.1.13 (0x00007f05e317e000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f05e2e44000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f05e2c3c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f05e2a1f000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f05e269d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f05e2394000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f05e217e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f05e1db4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f05e3a5a000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f05e1b9a000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f05e1971000)
libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007f05e176e000)
libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007f05e156b000)
libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f05e1364000)
libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007f05e1161000)
libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007f05e0f30000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f05e0d1e000)
libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f05e0b1b000)
libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f05e0915000)
libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f05e0713000)
libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f05e04fa000)
libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007f05e02f5000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f05e00d3000)
libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f05dfecd000)
libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f05dfcbb000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f05dfab7000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f05df8b3000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f05df6ad000)
由于 /home/mavbot/Pangolin/build/src
不是查找库的默认位置,您必须通知动态链接器 (ld.so) 到那里查找。
您可以通过以下方式完成此操作:
- 要么在每次 运行 程序时设置环境变量
LD_LIBRARY_PATH=/home/mavbot/Pangolin/build/src
,要么
- 用 "runpath" 编译你的程序。这将指示
ld.so
首先查看那里。旗帜如下:
-Wl,-rpath=/home/mavbot/Pangolin/build/src
- 或者只是全局安装穿山甲,链接器默认查找的位置(检查
/etc/ld.so.conf
and/or /etc/ld.so.conf.d/*
的内容以获得默认路径。
我是 pangolin 的新手,正在尝试在 Qt Creator 上编译穿山甲的 'hello world' 代码。我在编译时遇到了 运行 这个 "undefined reference" 问题。我的代码很简单:
#include <iostream>
#include <pangolin/pangolin.h>
using namespace std;
int main()
{
pangolin::CreateWindowAndBind("Main",640,480);
return 0;
}
我的 .pro 文件如下所示:
QT += core
QT -= gui
TARGET = hellopangolin
CONFIG += c++11
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
INCLUDEPATH += /home/mavbot/Pangolin/include /home/mavbot/Pangolin/build/src/include
LIBS += -L "/home/mavbot/Pangolin/build/src"
-lpangolin \
LIBS += -lGLEW \
-lGL \
-lEGL
我已经成功地编译和构建了穿山甲库作为示例程序 运行 在我的 system.I 运行 示例的可执行文件上顺利地找到了依赖库和试图在 QT Creator 中 link 它们。我也是 OpenGL 的新手。我 运行 的错误是:
错误:未定义对 `pangolin::CreateWindowAndBind(std::__cxx11::basic_string, std::allocator >, int, int, pangolin::Params常量&)'
我构建穿山甲如下:
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
make -j8
编辑 2:根据 Botje 的建议,在库路径之后插入 / 有助于编译。但是现在我有一个 运行 时间错误:
/home/mavbot/Documents/qtcodes/build-hellopangolin-Desktop-Debug/hellopangolin:加载共享库时出错:libpangolin.so:无法打开共享对象文件:没有这样的文件或目录
编辑 3: -rwxrwxr-x 1 mavbot mavbot 2333648 3 月 10 日 23:55 /home/mavbot/Pangolin/build/src/libpangolin.so
linux-vdso.so.1 => (0x00007ffedc5b8000)
libGL.so.1 => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 (0x00007f05e3401000)
libGLEW.so.1.13 => /usr/lib/x86_64-linux-gnu/libGLEW.so.1.13 (0x00007f05e317e000)
libX11.so.6 => /usr/lib/x86_64-linux-gnu/libX11.so.6 (0x00007f05e2e44000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f05e2c3c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f05e2a1f000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f05e269d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f05e2394000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f05e217e000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f05e1db4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f05e3a5a000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f05e1b9a000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f05e1971000)
libxcb-dri3.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0 (0x00007f05e176e000)
libxcb-present.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-present.so.0 (0x00007f05e156b000)
libxcb-sync.so.1 => /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1 (0x00007f05e1364000)
libxshmfence.so.1 => /usr/lib/x86_64-linux-gnu/libxshmfence.so.1 (0x00007f05e1161000)
libglapi.so.0 => /usr/lib/x86_64-linux-gnu/libglapi.so.0 (0x00007f05e0f30000)
libXext.so.6 => /usr/lib/x86_64-linux-gnu/libXext.so.6 (0x00007f05e0d1e000)
libXdamage.so.1 => /usr/lib/x86_64-linux-gnu/libXdamage.so.1 (0x00007f05e0b1b000)
libXfixes.so.3 => /usr/lib/x86_64-linux-gnu/libXfixes.so.3 (0x00007f05e0915000)
libX11-xcb.so.1 => /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1 (0x00007f05e0713000)
libxcb-glx.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0 (0x00007f05e04fa000)
libxcb-dri2.so.0 => /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0 (0x00007f05e02f5000)
libxcb.so.1 => /usr/lib/x86_64-linux-gnu/libxcb.so.1 (0x00007f05e00d3000)
libXxf86vm.so.1 => /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1 (0x00007f05dfecd000)
libdrm.so.2 => /usr/lib/x86_64-linux-gnu/libdrm.so.2 (0x00007f05dfcbb000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f05dfab7000)
libXau.so.6 => /usr/lib/x86_64-linux-gnu/libXau.so.6 (0x00007f05df8b3000)
libXdmcp.so.6 => /usr/lib/x86_64-linux-gnu/libXdmcp.so.6 (0x00007f05df6ad000)
由于 /home/mavbot/Pangolin/build/src
不是查找库的默认位置,您必须通知动态链接器 (ld.so) 到那里查找。
您可以通过以下方式完成此操作:
- 要么在每次 运行 程序时设置环境变量
LD_LIBRARY_PATH=/home/mavbot/Pangolin/build/src
,要么 - 用 "runpath" 编译你的程序。这将指示
ld.so
首先查看那里。旗帜如下:
-Wl,-rpath=/home/mavbot/Pangolin/build/src
- 或者只是全局安装穿山甲,链接器默认查找的位置(检查
/etc/ld.so.conf
and/or/etc/ld.so.conf.d/*
的内容以获得默认路径。