【发布时间】:2021-05-16 22:01:49
【问题描述】:
我希望有人可以帮助我研究一些我认为应该有些微不足道的事情。
我只是想编译一个包含wiringPi.h的cpp文件:
#include <wiringPi.h>
int main(){ return 0; }
我已经用不同的链接参数运行了几十个不同的命令,不管它总是说什么:
testing_spi.cpp:2:10: fatal error: wiringPi.h: No such file or directory
2 | #include "wiringPi.h"
| ^~~~~~~~~~~~
compilation terminated.
例如,
g++ -lwiringPi -o test test.cpp
g++ -L/usr/lib/aarch64-linux-gnu -lwiringPi -o test_spi testing_spi.cpp
...
所有结果都相同。我已经在这里呆了几个小时,很困惑为什么它没有链接。
第一个 g++ 示例是在安装了wiringPi 之后运行的,如网站“sudo apt installwiringPi”中所述。在那之后不起作用,我注意到 Ubuntu 附带了一个预装版本(ver2):
sudo apt list --installed | grep wiring
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libwiringpi2/focal,now 2.50-0ubuntu1 arm64 [installed]
wiringpi/focal,now 2.50-0ubuntu1 arm64 [installed]
但我能从 Ubuntu 中找到的唯一文档是垃圾: https://packages.ubuntu.com/focal/amd64/libwiringpi2/filelist 我能够在目录“/usr/lib/aarch64-linux-gnu/”中找到那些共享对象文件。我只是假设它以相同的方式包含在“wiringPi.h”中,但我也尝试了一些猜测“libwiringPi.h”、“wiringPi2.h”等。
当我查看 .so.2 文件时,我看到了一些我想动手的功能:
nm -gD --demangle /usr/lib/aarch64-linux-gnu/libwiringPi.so.2
w _ITM_deregisterTMCloneTable
w _ITM_registerTMCloneTable
U __ctype_b_loc
w __cxa_finalize
U __errno_location
U __fprintf_chk
w __gmon_start__
U __printf_chk
U __snprintf_chk
U __sprintf_chk
U __stack_chk_fail
U __stack_chk_guard
U __vsnprintf_chk
000000000000b910 T _drcSetupNet
0000000000023fd0 B _wiringPiClk
0000000000023fb8 B _wiringPiGpio
0000000000023fb0 B _wiringPiPads
0000000000023fc0 B _wiringPiPwm
0000000000023fd8 B _wiringPiTimer
0000000000023fc8 B _wiringPiTimerIrqRaw
U access
000000000000a180 T ads1115Setup
0000000000005b98 T analogRead
0000000000005bd8 T analogWrite
但我在尝试让它正确链接时遇到了太多麻烦。任何帮助将不胜感激。我已经盯着这种方式太久了。
我也会使用wiringPi 的网站版本,但在运行sudo apt install wiringPi 后找不到任何库文件。我很乐意让任何一个版本都为我工作。提前致谢!
【问题讨论】:
-
#include "..."用于 your 源目录中的文件。#include <...>用于您的包含路径 中的文件。 不要忘记使用-I来声明包含路径。 -
不要只是猜测。使用
find等工具查找文件,如find /usr -name '*.h'以查找所有头文件。 -
@tadman 感谢您的提示。我已经对标题进行了多次搜索,但搜索没有返回任何内容。如果确实安装了软件包,这意味着什么?我跑了
find /usr -name '*.h' | grep wiring和find / -name '*.h' | grep wiring并没有返回任何发现 -
在深入了解为什么没有安装标头之后。我猜标题不包括在内,除非它是一个'-dev'包。所以我找到了这个:packages.ubuntu.com/hirsute/libwiringpi-dev,它的头文件让我编译时不会出错。我仍然需要尝试一些功能,但我认为这将是一个单独的问题。感谢您的输入@tadman