【问题标题】:Linking wiringPi Shared Object Library for RPI4 in Ubuntu 20.04在 Ubuntu 20.04 中为 RPI4 链接 WiringPi 共享对象库
【发布时间】: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 &lt;...&gt; 用于您的包含路径 中的文件。 不要忘记使用-I 来声明包含路径。
  • 不要只是猜测。使用find 等工具查找文件,如find /usr -name '*.h' 以查找所有头文件。
  • @tadman 感谢您的提示。我已经对标题进行了多次搜索,但搜索没有返回任何内容。如果确实安装了软件包,这意味着什么?我跑了find /usr -name '*.h' | grep wiringfind / -name '*.h' | grep wiring 并没有返回任何发现
  • 在深入了解为什么没有安装标头之后。我猜标题不包括在内,除非它是一个'-dev'包。所以我找到了这个:packages.ubuntu.com/hirsute/libwiringpi-dev,它的头文件让我编译时不会出错。我仍然需要尝试一些功能,但我认为这将是一个单独的问题。感谢您的输入@tadman

标签: c++ ubuntu g++ wiringpi


【解决方案1】:

在深入了解为什么没有安装标头之后。我猜标题不包括在内,除非它是一个'-dev'包。所以我找到了这个包:https://packages.ubuntu.com/hirsute/libwiringpi-dev,它的头文件让我编译时不会出错。我仍然需要尝试一些功能,但我认为那将是另一个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    相关资源
    最近更新 更多