/tmp/ccxUiHJB.o:在函数‘P’中: sender.c:(.text+0x14):对‘sem_wait’未定义的引用 /tmp/ccxUiHJB.o:在函数‘V’中: sender.c:(.text+0x2e):对‘sem_post’未定义的引用 /tmp/ccxUiHJB.o:在函数‘main’中: sender.c:(.text+0xb1):对‘sem_open’未定义的引用 sender.c:(.text+0xce):对‘sem_open’未定义的引用 collect2: 错误:ld 返回 1
时间: 2023-12-29 16:11:39 浏览: 40
这个错误是因为你在代码中使用了一些未定义的函数,导致链接时出错。根据错误提示看,这些函数包括:sem_wait、sem_post和sem_open。
这些函数都是信号量相关的函数,需要在代码中包含对应的头文件`<semaphore.h>`并使用`-pthread`选项链接线程库,例如:
```
#include <semaphore.h>
#include <pthread.h>
// 编译时需要添加-pthread选项链接线程库
```
另外,还需要注意以下几点:
1. 在使用`sem_open`函数时,需要指定信号量的名字,并且该名字必须以`/`开头,例如:`"/mysem"`。
2. 在使用`sem_wait`和`sem_post`函数时,需要先通过`sem_open`函数打开信号量并获取其标识符,然后才能进行P操作和V操作。
修改完代码并添加头文件和链接选项后,重新编译并链接即可。
相关问题
ROS编译时出现In file included from /home/ros/catkin_ctr/build/mavlink/common/../protocol.h:4, from /home/ros/catkin_ctr/build/mavlink/common/common.h:30, from /home/ros/catkin_ctr/build/mavlink/common/mavlink.h:32, from /home/ros/catkin_ctr/src/PX4-Autopilot/src/modules/mavlink/mavlink_bridge_header.h:95, from /home/ros/catkin_ctr/src/PX4-Autopilot/src/modules/mavlink/mavlink_command_sender.h:51, from /home/ros/catkin_ctr/src/PX4-Autopilot/src/modules/mavlink/mavlink_main.h:81, from /home/ros/catkin_ctr/src/PX4-Autopilot/src/modules/mavlink/mavlink_stream.cpp:45: /home/ros/catkin_ctr/build/mavlink/common/../mavlink_types.h:27: error: "MAVLINK_CORE_HEADER_LEN" redefined [-Werror] 27 | #define MAVLINK_CORE_HEADER_LEN 9 ///< Length of core header (of the comm. layer) | compilation terminated due to -Wfatal-errors. cc1plus: all warnings being treated as errors make[2]: *** [PX4-Autopilot/src/modules/mavlink/mavlink_tests/CMakeFiles/modules__mavlink__mavlink_tests.dir/build.make:89:PX4-Autopilot/src/modules/mavlink/mavlink_tests/CMakeFiles/modules__mavlink__mavlink_tests.dir/__/mavlink_stream.cpp.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:16201:PX4-Autopilot/src/modules/mavlink/mavlink_tests/CMakeFiles/modules__mavlink__mavlink_tests.dir/all] 错误 2 make: *** [Makefile:163:all] 错误 2怎么解决
这个错误是因为在编译过程中,MAVLINK_CORE_HEADER_LEN被重新定义导致的,可以尝试以下方法解决:
1. 更新PX4-Autopilot代码到最新版本。
2. 清除ROS的构建文件,然后重新构建。
3. 检查代码中是否有重复定义MAVLINK_CORE_HEADER_LEN的情况,如果有,需要进行修改。
4. 修改编译选项,禁用-Werror选项,这样编译出现警告时就不会被当作错误处理。
希望这些方法能够帮到你。
home/ros/catkin_ctr/build/mavlink/development/../mavlink_types.h:28: error: "MAVLINK_CORE_HEADER_LEN" redefined [-Werror] 28 | #define MAVLINK_CORE_HEADER_LEN 9 ///< Length of core header (of the comm. layer) | compilation terminated due to -Wfatal-errors. cc1plus: all warnings being treated as errors make[2]: *** [PX4-Autopilot/src/modules/mavlink/CMakeFiles/modules__mavlink.dir/build.make:81:PX4-Autopilot/src/modules/mavlink/CMakeFiles/modules__mavlink.dir/mavlink_command_sender.cpp.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:16108:PX4-Autopilot/src/modules/mavlink/CMakeFiles/modules__mavlink.dir/all] 错误 2 make: *** [Makefile:163:all] 错误 2
这是一个编译错误,提示了一个宏被重新定义了。具体的错误信息是:
```
home/ros/catkin_ctr/build/mavlink/development/../mavlink_types.h:28: error: "MAVLINK_CORE_HEADER_LEN" redefined [-Werror]
28 | #define MAVLINK_CORE_HEADER_LEN 9 ///< Length of core header (of the comm. layer)
```
这个错误可能是由于两个头文件中都定义了同一个宏而引起的。你需要检查一下项目中是否有重复的定义,然后将其删除或者修改。另外,你也可以尝试关闭编译器的 `-Wfatal-errors` 选项,这样可以使编译器忽略警告并继续编译。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)