我是C / C ++的新手,我正在尝试在Ubuntu机器(Trusty Tahr)上本地构建和运行来自github的ttwatch。说明包括首先安装一些库:cmake,openssl,curl,libusb,并包含一个注释来安装" -dev"版本(例如libssl-dev,libcurl-dev,libusb-1.0-0-dev)。我在使用libusb时遇到了一些麻烦。我在互联网上看到有关这方面的问题,但尚未找到可行的解决方案。
正常运行cmake .
:
meowmeow@kittytown:~/code/ttwatch$ cmake .
-- Enabled daemon function
-- Found libusb-1.0:
-- - Includes: /usr/include/libusb-1.0
-- - Libraries: /usr/lib/x86_64-linux-gnu/libusb.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/meowmeow/code/ttwatch
但是运行make
表明libusb未正确定位:
meowmeow@kittytown:~/code/ttwatch$ make
[ 42%] Built target libttbin
[ 42%] Built target libttwatch
[ 42%] Built target ttbincnv
[ 42%] Built target ttbinmod
[ 42%] Built target manifest
Linking CXX executable ttwatch
CMakeFiles/ttwatch.dir/src/ttwatch.c.o: In function `main':
/home/meowmeow/code/ttwatch/src/ttwatch.c:1618: undefined reference to `libusb_init'
/home/meowmeow/code/ttwatch/src/ttwatch.c:1796: undefined reference to `libusb_exit'
...
如果我查看/usr/includes/
,我会看到libusb:
meowmeow@kittytown:~/code/ttwatch$ ls /usr/include/libusb-1.0/libusb.h
/usr/include/libusb-1.0/libusb.h
dpkg显示:
meowmeow@kittytown:~/code/ttwatch$ dpkg -L libusb-1.0-0-dev
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/libusb-1.0.pc
/usr/lib/x86_64-linux-gnu/libusb-1.0.a
/usr/share
/usr/share/doc
/usr/share/doc/libusb-1.0-0-dev
/usr/share/doc/libusb-1.0-0-dev/copyright
/usr/include
/usr/include/libusb-1.0
/usr/include/libusb-1.0/libusb.h
/usr/lib/x86_64-linux-gnu/libusb-1.0.so
/usr/share/doc/libusb-1.0-0-dev/README
/usr/share/doc/libusb-1.0-0-dev/changelog.Debian.gz
meowmeow@kittytown:~/code/ttwatch$ dpkg -L libusb-1.0-0
/.
/lib
/lib/x86_64-linux-gnu
/lib/x86_64-linux-gnu/libusb-1.0.so.0.1.0
/usr
/usr/share
/usr/share/doc
/usr/share/doc/libusb-1.0-0
/usr/share/doc/libusb-1.0-0/README
/usr/share/doc/libusb-1.0-0/copyright
/usr/share/doc/libusb-1.0-0/changelog.Debian.gz
/lib/x86_64-linux-gnu/libusb-1.0.so.0
文件ttwatch/includes/libttwatch.h
包含libusb #include <libusb.h>
,我尝试将其修改为#include <libusb-1.0/libusb.h>
,希望能更好地匹配我的/usr/includes/
文件,但是没有改变错误输出。
非常感谢任何帮助!
编辑:
使用make VERBOSE=1
会显示-lusb,而不是-lusb-1.0:
...
/usr/bin/c++ -g CMakeFiles/ttwatch.dir/src/ttwatch.c.o CMakeFiles/ttwatch.dir/src/log.c.o CMakeFiles/ttwatch.dir/src/options.c.o CMakeFiles/ttwatch.dir/src/json.c.o CMakeFiles/ttwatch.dir/src/download.c.o CMakeFiles/ttwatch.dir/src/firmware.c.o CMakeFiles/ttwatch.dir/src/misc.c.o CMakeFiles/ttwatch.dir/src/get_activities.c.o CMakeFiles/ttwatch.dir/src/update_gps.c.o CMakeFiles/ttwatch.dir/src/set_time.c.o -o ttwatch -rdynamic libttwatch.a libttbin.a -lusb -lssl -lcrypto -lcurl
libusb.so
似乎存在:
meowmeow@kittytown:~/code/ttwatch$ dpkg-query -S /usr/lib/x86_64-linux-gnu/libusb.so
libusb-dev: /usr/lib/x86_64-linux-gnu/libusb.so
我尝试卸载libusb-dev(sudo apt-get remove libusb-dev
)并安装了libusb-1.0(sudo apt-get install libusb-1.0
)以查看是否可以解决问题。我现在有一个/usr/lib/x86_64-linux-gnu/libusb-1.0.so
(请注意1.0),但我现在从make
获取此信息:
make[2]: *** No rule to make target /usr/lib/x86_64-linux-gnu/libusb.so', needed by ttwatch'. Stop.
答案 0 :(得分:2)
我不知道Debian有包libusb-dev
和
libusb-1.0-dev
。从包装信息我不知道为什么有2
同一个库的包,也许libusb-dev
是旧版本的
不同的API和其他软件包可能仍然将其作为依赖项。所以
除非您不关心/需要,否则取出包装可能不是一个好主意
包取决于libusb-dev
,在这种情况下,您可以执行apt-get purge
libusb-dev && apt-get autoremove
。请确保此可能卸载
你需要的包裹。只有当你知道自己在做什么时才这样做。
我没想到Debian允许你同时安装这两个软件包 时间,但这可能是两个图书馆的API不同而且不是 相互冲突。
这似乎让cmake
感到困惑,这两个库都无法处理
同时安装。我已经浏览了issues页面和我
没有发现与此相关的问题。所以,如果你无法建立它,
我建议您转到issue页面,如果您没有github
帐户,创建一个并留下有关构建包的错误报告
3}}和libusb-dev
同时安装。
另一种选择是在执行
之前对文件cmake_modules/FindLibUSB.cmake
进行一些小修改
$ mkdir build && cd build
$ cmake ..
在libusb-1.0-dev
上找到find_library(LIBUSB_1_LIBRARY
行。下一行是NAMES
下一行是usb-1.0 usb
。从中删除usb
,以便
find_library
仅搜索libusb-1.0
。保存文件,然后就可以了
$ mkdir build && cd build
$ cmake ..
这应解决问题。