关于CC2540/2541编译Performing Post-Build Action卡住的问题

本文详细介绍了在使用TI官方技术手册编译CC2540/2541单片机时遇到的Post-Build Action卡住问题,并提供了两种解决方案:修改cc254x_ubl_pp.bat文件或直接将工程拷贝至软件和协议栈安装的盘。解释了问题原因在于使用的批处理文件路径问题,适用于特定的协议栈版本和工程配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[转]关于CC2540/2541编译Performing Post-Build Action卡住的问题

转自facai_sdu的专栏,原文:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece7631049c0666e04de3e69c0d0622e95c51484642c1d1020feeb797f451987962d345ab84e28aba6716f310221b59fc28341c9fecf68798765633048db014d8845fadc4654837dd11cfeaf68b7fdab6cc5b9d2a28c0515910e59&p=87759a44d18913f101be9b7c5949&newp=8965d61c85cc43f508e29579494792695803ed6336d2d04f&user=baidu&fm=sc&query=performing+post+build+action&qid=8abeb63100090683&p1=1


CC2540/2541是TI推出的BLE单片机,并且支持空中固件升级(OAD)。本人按照TI官方的技术手册,在使用OAD编译产生bin文件时,发现出现了问题,编译卡在了Performing Post-Build Action 这一步并且无法产生bin文件。如下图所示


后来在TI社区看到有国外的技术大牛讨论这个问题,并且提出过解决方案,详见如下连接

http://e2e.ti.com/support/wireless_connectivity/f/538/t/314089

意思就大概就是说,出现这种问题,是因为使用的批处理文件C:\Program Files\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\common\cc2540\cc254x_ubl_pp.bat运行错误。这应该算是TI协议栈的一个bug,当软件或者工程安装在了其它盘符时,就会产生这种问题。

解决方案是编辑C:\Program Files\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\common\cc2540\cc254x_ubl_pp.bat文件,将其中的

@echo off
chdir %1\..\..\common\cc2540
start cc254x_ubl_pp.js %2 %3 %4 %5

改为如下:

@echo off

%~d1
chdir %1\..\..\common\cc2540

start cc254x_ubl_pp.js %2 %3 %4 %5

即可。

这种方法是可行的,但是需要注意的是,所指的是关联自己工程的cc254x_ubl_pp.bat,并不一定是协议栈中的固定的链接C:\Program Files\Texas Instruments\BLE-CC254x-1.4.0\Projects\ble\common\cc2540\cc254x_ubl_pp.bat,如果用户自己建的了一个完整的工程,其中拷贝了新的外部链接文件(你的工程目录)\Projects\ble\common\cc2540\cc254x_ubl_pp.bat,需要找到自己工程使用的文件,然后做如上更改。

修改后再次编译,就会出现编译通过,同时产生了bin文件



还有另外一种解决方法比较简单,是直接将该工程拷贝到C盘(软件和协议栈安装的盘)中,也可以实现上述目的。


lixing@lixing:~/PX4-Autopilot$ make px4_sitl gazebo [0/4] Performing build step for 'sitl_gazebo-classic' [11/62] Building CXX object CMakeFiles...ugin.dir/src/gazebo_aruco_plugin.cpp.o FAILED: CMakeFiles/gazebo_aruco_plugin.dir/src/gazebo_aruco_plugin.cpp.o /usr/bin/ccache /usr/bin/c++ -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_DATE_TIME_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_PROGRAM_OPTIONS_DYN_LINK -DBOOST_REGEX_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_TEST_DYN_LINK -DBOOST_THREAD_DYN_LINK -DLIBBULLET_VERSION=2.88 -DLIBBULLET_VERSION_GT_282 -Dgazebo_aruco_plugin_EXPORTS -I/home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/include -I. -I/usr/local/include/eigen3/eigen3 -I/usr/include/gazebo-11/gazebo/msgs -I/home/lixing/PX4-Autopilot/build/px4_sitl_default/mavlink -I/home/lixing/PX4-Autopilot/build/px4_sitl_default/mavlink/mavlink/v2.0 -I/home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/external/OpticalFlow/include -I/usr/include/gstreamer-1.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/gazebo-11 -isystem /usr/include/bullet -isystem /usr/include/simbody -isystem /usr/include/sdformat-9.10 -isystem /usr/include/ignition/math6 -isystem /usr/include/OGRE -isystem /usr/include/OGRE/Terrain -isystem /usr/include/OGRE/Paging -isystem /usr/include/ignition/transport8 -isystem /usr/include/ignition/msgs5 -isystem /usr/include/ignition/common3 -isystem /usr/include/ignition/fuel_tools4 -isystem /usr/include/x86_64-linux-gnu/qt5 -isystem /usr/include/x86_64-linux-gnu/qt5/QtCore -isystem /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -isystem /usr/local/include/eigen3 -isystem /usr/local/opencv3.4/include/opencv4 -isystem /usr/include/sdformat-9.10/sdf/.. -isystem /usr/include/ignition/cmake2 -isystem /usr/include/uuid -O2 -g -DNDEBUG -fPIC -Wno-deprecated-declarations -Wno-address-of-packed-member -I/usr/include/uuid -std=gnu++17 -MD -MT CMakeFiles/gazebo_aruco_plugin.dir/src/gazebo_aruco_plugin.cpp.o -MF CMakeFiles/gazebo_aruco_plugin.dir/src/gazebo_aruco_plugin.cpp.o.d -o CMakeFiles/gazebo_aruco_plugin.dir/src/gazebo_aruco_plugin.cpp.o -c /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/src/gazebo_aruco_plugin.cpp In file included from /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/src/gazebo_aruco_plugin.cpp:31: /home/lixing/PX4-Autopilot/Tools/simulation/gazebo-classic/sitl_gazebo-classic/include/gazebo_aruco_plugin.h:42:10: fatal error: opencv2/aruco.hpp: 没有那个文件或目录 42 | #include <opencv2/aruco.hpp> | ^~~~~~~~~~~~~~~~~~~ compilation terminated. [22/62] Building CXX object CMakeFiles...src/gazebo_camera_manager_plugin.cpp.o ninja: build stopped: subcommand failed. FAILED: external/Stamp/sitl_gazebo-classic/sitl_gazebo-classic-build cd /home/lixing/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic && /usr/bin/cmake --build /home/lixing/PX4-Autopilot/build/px4_sitl_default/build_gazebo-classic -- -j 12 ninja: build stopped: subcommand failed. make: *** [Makefile:227:px4_sitl] 错误 1
最新发布
07-23
<think>我们遇到了编译错误,具体是在编译gazebo_aruco_plugin时,找不到opencv2/aruco.hpp头文件。 这个错误表明系统缺少必要的OpenCV库,特别是包含ArUco模块的部分。 解决方案: 1. 确认是否安装了OpenCV,并且版本是否包含ArUco模块。 2. 安装或更新OpenCV到包含ArUco模块的版本(OpenCV 3.x及以上,但需要确保编译时包含了opencv_contrib模块中的aruco)。 步骤: 由于PX4的Gazebo仿真需要OpenCV的ArUco库,我们可以通过安装完整的OpenCV(包括contrib模块)来解决。 对于Ubuntu系统,可以尝试以下命令安装OpenCV(包含contrib): sudo apt-get install libopencv-dev 但是,请注意,Ubuntu官方仓库中的OpenCV可能不包含contrib模块,或者版本较旧。因此,我们可能需要从源码编译安装OpenCV。 不过,先尝试安装官方提供的包,因为PX4的Gazebo插件可能对版本有要求。 如果已经安装了OpenCV但缺少aruco,可以尝试安装额外的包: sudo apt-get install libopencv-contrib-dev 如果上述方法无效,则需要从源码编译安装OpenCV(包括contrib模块)。 另外,确保在编译PX4之前已经正确设置了环境变量,以便编译器能够找到OpenCV。 如果问题仍然存在,可以尝试清理构建并重新编译: make distclean make px4_sitl gazebo 但是,根据错误信息,我们首先需要解决OpenCV中缺少aruco.hpp的问题。 因此,第一步是安装包含aruco模块的OpenCV。 如果使用apt安装,可以尝试: sudo apt-get install libopencv-dev libopencv-contrib-dev 安装后,再次尝试编译。 如果问题依旧,可能是因为Gazebo插件在查找OpenCV时没有找到正确的路径。这时需要检查OpenCV的安装路径,并确保头文件在编译器的搜索路径中。 注意:PX4的sitl_gazebo子模块在编译时会尝试查找OpenCV,如果找不到,则可能报错。我们可以检查sitl_gazebo的CMakeLists.txt中关于OpenCV的配置。 但是,通常安装libopencv-dev和libopencv-contrib-dev可以解决。 如果还是不行,可能需要手动指定OpenCV路径。但这种情况较少,除非系统中有多个OpenCV版本。 总结步骤: 1. 安装OpenCV和contrib:sudo apt-get install libopencv-dev libopencv-contrib-dev 2. 如果安装成功,再次运行编译命令:make px4_sitl gazebo 3. 如果仍然出现同样错误,则可能需要从源码编译OpenCV(包含contrib模块)。 从源码编译OpenCV的步骤(简要): - 下载OpenCV和opencv_contrib源码(选择相同版本,例如4.5.0)。 - 创建构建目录,进入并执行cmake命令,指定contrib模块路径: cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory> - 然后make和sudo make install。 安装完成后,再尝试编译PX4。 注意:从源码编译OpenCV可能会覆盖系统原有的OpenCV,且耗时较长,请谨慎操作。 此外,还可以检查PX4的文档,确认推荐的OpenCV版本和安装方式。 根据错误信息,我们也可以尝试更新子模块(因为sitl_gazebo是子模块): git submodule update --init --recursive 但通常这个错误是由于本地OpenCV环境问题引起的。 最后,如果问题仍然存在,可以尝试在PX4的构建目录中删除与sitl_gazebo相关的部分,然后重新构建。 但是,我们先尝试安装libopencv-contrib-dev。 现在,根据以上分析,给出回答。</think>### 问题分析与解决方案 您遇到的编译错误是由于缺少 OpenCV 的 ArUco 模块导致的。关键错误信息: ```bash fatal error: opencv2/aruco.hpp: 没有那个文件或目录 ``` #### 原因分析: 1. **OpenCV 模块缺失**:PX4 的 Gazebo 仿真需要 `opencv_contrib` 中的 ArUco 模块,但标准 OpenCV 安装不包含此扩展 2. **依赖不完整**:编译 Gazebo 插件时未检测到完整的 OpenCV 开发包 3. **版本冲突**:系统可能安装了多个 OpenCV 版本导致路径混乱 #### 解决方案: 1. **安装完整 OpenCV 开发包**(推荐): ```bash # 安装 OpenCV 核心库 + 扩展模块 sudo apt-get update sudo apt-get install libopencv-dev libopencv-contrib-dev ``` 2. **验证 OpenCV 安装**: ```bash # 检查 ArUco 头文件是否存在 ls /usr/include/opencv4/opencv2/aruco.hpp # 检查库文件 pkg-config --modversion opencv4 ``` 3. **清理并重新编译**: ```bash cd ~/PX4-Autopilot make distclean # 彻底清理构建缓存 make px4_sitl gazebo # 重新编译 ``` 4. **手动指定 OpenCV 路径**(如果安装位置特殊): ```bash # 在编译命令前添加路径变量 export OpenCV_DIR=/usr/local/opencv4/share/opencv4 make px4_sitl gazebo ``` 5. **源码编译 OpenCV**(若 apt 安装无效): ```bash # 安装编译依赖 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config git clone https://github.com/opencv/opencv_contrib.git # 配置时添加扩展模块路径 cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules .. ``` ### 补充说明 - 成功安装后,`gazebo_aruco_plugin.cpp` 应能正常找到 `<opencv2/aruco.hpp>` - 如果使用自定义 OpenCV 版本,需确保 Gazebo 插件配置指向正确路径 - 建议保持 PX4 子模块更新:`git submodule update --init --recursive`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值