我正在使用 kinect 获取土壤侵蚀的 3D 模型并扫描植被,并且正在尝试为 kinect 编译此应用程序:http://www.ccs.neu.edu/research/gpc/imucam/index.html但是当我运行 make 时出现以下错误:
linking record_frames from record_frames.o fps.o frame.o grabber.o interactor.o os.o pick_player.o player.o reader.o recorder.o source.o um6.o viewer.o writer.o
/usr/bin/ld: cannot find -lboost_serialization-mt
/usr/bin/ld: cannot find -lboost_system-mt
/usr/bin/ld: cannot find -lboost_filesystem-mt
/usr/bin/ld: cannot find -lboost_thread-mt
/usr/bin/ld: cannot find -lboost_date_time-mt
/usr/bin/ld: cannot find -lboost_iostreams-mt
/usr/bin/ld: cannot find -lboost_regex-mt
/usr/bin/ld: cannot find -lboost_mpi-mt
collect2: error: ld returned 1 exit status
make: *** [record_frames.bin] Error 1
我阅读了 makefile 并发现:
DEF_BOOST_LIBS := -lboost_serialization-mt -lboost_system-mt \
-lboost_filesystem-mt -lboost_thread-mt \
-lboost_date_time-mt -lboost_iostreams-mt \
-lboost_regex-mt -lboost_mpi-mt
因此,我的问题是如何在 makefile 中调用我的 libbost.so 库。我有 libboost 1.55。我尝试将 mt 更改为 .so,但出现相同的错误:
/usr/bin/ld: cannot find -libboost_serialization.so
任何帮助解决这个问题都会非常有帮助,提前谢谢 José Soto
答案1
libboost 库更改了名称,删除了“-mt”。您可以编辑 makefile 以删除名称中的 -mt,或者尝试以下建议:http://forum.freecadweb.org/viewtopic.php?t=4541 重建 makefile。
kinect 需要 64 位,而您的启动库位于 32 位目录中。您使用的是 64 位机器吗?如果是,您可以安装 64 位 boost 包吗?
在终端中运行
uname -a
查看您的操作系统是 32 位还是 64 位(X86_64 表示 64 位)。您可能安装了 32 位版本的操作系统。
使用以下命令检查各个包是否为 64 位版本:
dpkg -l |fgrep boost
例如软件包名称上的“:amd64”。
ii libboost-filesystem-dev:amd64 1.54.0.1ubuntu1 ...
如果您得到的是“:i386”而不是“amd64”,则它是 32 位版本。除非您明确安装了它们(包括安装时在软件包名称上加上“:i386”),否则不确定这种情况是如何发生的。您只需使用以下命令安装所需的 64 位 boost 软件包:
sudo apt-get install libboost-filesystem-dev
或者简单地使用 libboost-filesystem-dev:amd64 强制使用 64 位软件包。您甚至不必担心卸载 i386 版本,它们是不同的目录,但是如果您确实要删除它们,请在软件包名称上使用“:i386”来选择它们而不是 64 位版本。
在我的 14.04 系统上,我下载了最新的 kinect 包(包含 imucam-R186M_2014-05-29),添加了我缺少的 boost 库,编辑了 makefile 以删除“-mt”,并且所有内容都成功编译,只出现一个 openni 警告。