Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake/Make找不到libusb_C++_C_Makefile_Cmake_Libusb - Fatal编程技术网

C++ CMake/Make找不到libusb

C++ CMake/Make找不到libusb,c++,c,makefile,cmake,libusb,C++,C,Makefile,Cmake,Libusb,我是C/C++新手,正在尝试在Ubuntu机器(Trusty Tahr)上本地构建和运行github。说明包括首先安装一些库:cmake、openssl、curl、libusb,并包括安装“-dev”版本的说明(例如libssl-dev、libcurl-dev、libusb-1.0-0-dev)。我的libusb有点问题。我在互联网上看到了很多关于这方面的问题,但还没有找到一个有效的解决方案 运行cmake.似乎工作正常: meowmeow@kittytown:~/code/ttwatch$ c

我是C/C++新手,正在尝试在Ubuntu机器(Trusty Tahr)上本地构建和运行github。说明包括首先安装一些库: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
,我尝试将其修改为
\include
,希望更好地匹配我的
/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。因此
似乎存在:

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。所以我改为
(注意1.0),但我现在从
make
得到这个:

make[2]: *** No rule to make target /usr/lib/x86_64-linux-gnu/libusb.so', needed by ttwatch'. Stop.

我不知道Debian有软件包和 . 从包裹信息中,我不知道为什么有2个 同一个库的包,可能
libusb-dev
是一个带有 不同的API和其他包可能仍然将其作为依赖项。所以 删除包可能不是一个好主意,除非您不在乎/不需要 包取决于
libusb-dev
,在这种情况下,您可以执行
apt-get-purge
libusb开发和apt获取自动删除
。请注意,此可能会卸载 您需要的软件包。所以,只有当你知道自己在做什么的时候才去做

我没想到Debian允许您同时安装这两个软件包 时间,但这可能是因为两个库的API不同而不相同 相互冲突

这似乎混淆了
cmake
,这两个库都无法处理 同时安装。我浏览了这一页,我 没有发现与此相关的问题。所以如果你无法建造它, 如果你没有github,我建议你去这个页面 帐户,创建一个,并在 并同时安装

另一个选项是在执行之前对文件
cmake_modules/FindLibUSB.cmake
进行一个小的修改

$mkdir构建和cd构建
$cmake。。
在上找到行
Find_library(LIBUSB_1_library
。下一行是
NAMES
下一行是
usb-1.0usb
。从中删除
usb
,以便
find_library
仅搜索
libusb-1.0
。保存该文件,然后即可执行此操作

$mkdir构建和cd构建
$cmake。。

这应该可以解决问题。

我不知道Debian有软件包和 .从包裹信息中,我不知道为什么有2个 同一个库的包,可能
libusb-dev
是一个带有 不同的API和其他包可能仍然将其作为依赖项 删除包可能不是一个好主意,除非您不在乎/不需要 包取决于
libusb-dev
,在这种情况下,您可以执行
apt-get-purge
libusb dev&&apt get autoremove
。请注意此可能会卸载 你需要的软件包。所以只有当你知道你在做什么时才去做

我没想到Debian允许您同时安装这两个软件包 时间,但这可能是因为两个库的API不同而不相同 相互冲突

这似乎混淆了
cmake
,这两个库都无法处理 都是同时安装的。我已经浏览了页面 尚未发现与此相关的问题。因此,如果您无法构建它, 如果你没有github,我建议你去这个页面 帐户,创建一个,并在 并同时安装

另一个选项是在执行之前对文件
cmake_modules/FindLibUSB.cmake
进行一个小的修改

$mkdir构建和cd构建
$cmake。。
在上找到行
Find_library(LIBUSB_1_library
。下一行是
NAMES
下一行是
usb-1.0usb
。从中删除
usb
,以便
find_library
仅搜索
libusb-1.0
。保存该文件,然后即可执行此操作

$mkdir构建和cd构建
$cmake。。

这应该可以解决问题。

执行
使VERBOSE=1
并检查链接器的实际调用(检查
-l
-l
标志等).CMakeLists.txt
可能正在添加
-lusb
链接依赖项,而不是
-lusb-1.0
。我已经检查并检查了
usb-1.0
usb
。是否手动安装了另一个
libusb
?检查文件
/usr/lib/x86\u 64-linux-gnu/libusb.so
是否存在。运行
dpkg查询-S/usr/lib/x86_64-linux-gnu/libusb.so
查看哪个软件包安装了该文件。我已将代码添加到问题中,并将其从注释中删除。谢谢!出现无规则错误是因为.so文件可能在卸载后消失,cmake还不知道。执行
cmake.
重建cmake缓存和
Makefile
s.
make
应该在这之后工作。执行
make VERBOSE=1
并检查链接器的实际调用(检查
-l