编译Mono ./include/private/gcconfig.h:1334:34: 错误:‘GC_DATASTART

 

分类: 嵌入式

2012-05-20 18:42:03

./include/private/gcconfig.h:1334:34: 错误:‘GC_DATASTART

一直想自己编译Mono,但总是没有能如愿。

遇到问题很多:

1)x86-desc不能识别。

首先编译eglib,libgc,有几个小warning和小错误,可以被修正。

编译tools目录下genmdesc,编译后,在命令行下,将mini目录下cpu-x86.md复制到genmdesc.exe目录下。

运行genmdesc cpu-x86.h x86_desc cpu-86.md,会产生cpu-x86.h,将其复制mini目录下,会消除x86-desc不能被识别的错误。

using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using Basler.Pylon; namespace Vision.Hardware.Basler { /// <summary> /// 基于 Basler pylon SDK 实现的工业相机驱动类 /// 支持 GigE / USB3 视觉相机,提供连接、拍照、软触发等功能 /// </summary> public class BaslerCamera : IDisposable { private Camera _camera; // Pylon SDK 提供的核心对象 private bool _isConnected = false; private bool _isDisposed = false; /// <summary> /// 相机序列号(唯一标识) /// </summary> public string SerialNumber { get; private set; } /// <summary> /// 当前是否已连接到相机 /// </summary> public bool IsConnected => _isConnected; /// <summary> /// 相机型号名称(如 acA1920-40gc) /// </summary> public string ModelName => _isConnected ? _camera.CameraInfo.ModelName : null; /// <summary> /// 构造函数:指定要连接的相机序列号 /// </summary> /// <param name="serialNumber">相机背面标注的 SN 号</param> public BaslerCamera(string serialNumber) { if (string.IsNullOrWhiteSpace(serialNumber)) throw new ArgumentException("序列号不能为空", nameof(serialNumber)); SerialNumber = serialNumber.Trim(); } /// <summary> /// 初始化并连接相机 /// </summary> /// <returns>是否成功连接</returns> public bool Connect() { try { // 枚举所有可用的 Basler 相机 var cameraList = CameraFinder.Enumerate(); foreach (var cameraInfo in cameraList) { // 匹配序列号 if (cameraInfo["SerialNumber"]?.ToString() == SerialNumber) { _camera = new Camera(cameraInfo); _camera.Open(); // 设置默认参数 ConfigureDefaultSettings(); _isConnected = true; return true; } } // 没找到匹配的相机 Console.WriteLine($"[ERROR] 未找到序列号为 '{SerialNumber}' 的相机"); return false; } catch (Exception ex) { Console.WriteLine($"[ERROR] 连接相机时发生异常: {ex.Message}"); Disconnect(); return false; } } /// <summary> /// 配置相机默认工作参数 /// </summary> private void ConfigureDefaultSettings() { try { var param = _camera.Parameters; // 单帧采集模式 param[PLCamera.AcquisitionMode].SetValue(PLCamera.AcquisitionMode.SingleFrame); // 关闭外部触发(自由运行) param[PLCamera.TriggerMode].SetValue(PLCamera.TriggerMode.Off); // 曝光时间:10ms(可根据需求调整) param[PLCamera.ExposureTimeAbs].SetValue(10000); // 像素格式:BayerRG8(彩色相机),如果是黑白可改为 Mono8 param[PLCamera.PixelFormat].SetValue(PLCamera.PixelFormat.BayerRG8); // 增益设为自动(可选) // param[PLCamera.GainAuto].SetValue("Once"); } catch (Exception ex) { Console.WriteLine($"[WARNING] 参数设置失败: {ex.Message}"); } } /// <summary> /// 获取一张图像(超时机制) /// </summary> /// <param name="timeout">等待图像的最大时间</param> /// <returns>Bitmap 图像对象,失败返回 null</returns> public Bitmap GrabImage(TimeSpan timeout) { if (!_isConnected) { Console.WriteLine("[ERROR] 相机未连接,无法抓图"); return null; } try { // 创建图像转换器(原始数据 → Bitmap) using (var converter = new PixelDataConverter()) { converter.OutputPixelFormat = PixelType.BGRA8packed; // 兼容 GDI+ // 开始采集一帧 _camera.StreamGrabber.Start(1); // 尝试获取结果 IGrabResult grabResult = _camera.StreamGrabber.RetrieveResult((int)timeout.TotalMilliseconds, TimeoutHandling.ReturnNullObject); if (grabResult != null && grabResult.GrabSucceeded) { using (var converted = converter.Convert(grabResult)) { return new Bitmap(converted.Bitmap); } } else { Console.WriteLine($"[ERROR] 抓图失败: {grabResult?.ErrorMessage ?? "超时或未知错误"}"); return null; } } } catch (Exception ex) { Console.WriteLine($"[ERROR] 抓图异常: {ex.Message}"); return null; } } /// <summary> /// 手动触发一次拍照(适用于触发模式) /// </summary> public void Trigger() { if (!_isConnected) return; try { var param = _camera.Parameters; // 启用软件触发 param[PLCamera.TriggerMode].SetValue(PLCamera.TriggerMode.On); param[PLCamera.TriggerSource].SetValue(PLCamera.TriggerSource.Software); // 发送触发命令 param[PLCamera.TriggerSoftware].Execute(); } catch (Exception ex) { Console.WriteLine($"[ERROR] 触发失败: {ex.Message}"); } } /// <summary> /// 异步抓图(避免阻塞 UI 线程) /// </summary> /// <param name="timeout"></param> /// <returns></returns> public async Task<Bitmap> GrabImageAsync(TimeSpan timeout) { return await Task.Run(() => GrabImage(timeout)); } /// <summary> /// 断开与相机的连接 /// </summary> public void Disconnect() { if (_isConnected && _camera != null) { try { _camera.Close(); _isConnected = false; } catch { /* 忽略关闭异常 */ } } } #region IDisposable Support /// <summary> /// 释放非托管资源(推荐显式调用 Dispose()) /// </summary> public void Dispose() { Dispose(disposing: true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (!_isDisposed) { if (disposing) { // 释放托管资源 Disconnect(); _camera?.Dispose(); } // 释放非托管资源由 SDK 内部处理 _isDisposed = true; } } ~BaslerCamera() { Dispose(false); } #endregion } }这是完整代码,也是你提供的,你看可有不对
10-30
(base) xu@xu-Legion-Y9000P-IAH7H:~/ORB_SLAM3/Examples/ROS/ORB_SLAM3/build$ make -j$(nproc) Scanning dependencies of target Mono_Inertial Scanning dependencies of target Stereo_Inertial Scanning dependencies of target Stereo Scanning dependencies of target Mono Scanning dependencies of target RGBD Scanning dependencies of target MonoAR [ 8%] Building CXX object CMakeFiles/MonoAR.dir/src/AR/ros_mono_ar.cc.o [ 16%] Building CXX object CMakeFiles/Mono.dir/src/ros_mono.cc.o [ 25%] Building CXX object CMakeFiles/Stereo.dir/src/ros_stereo.cc.o [ 33%] Building CXX object CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o [ 41%] Building CXX object CMakeFiles/Mono_Inertial.dir/src/ros_mono_inertial.cc.o [ 50%] Building CXX object CMakeFiles/Stereo_Inertial.dir/src/ros_stereo_inertial.cc.o /home/xu/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_mono_inertial.cc:34:9: fatal error: ../../../include/System.h: 没有那个文件或目录 34 | #include"../../../include/System.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/xu/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_mono.cc:30:9: fatal error: ../../../include/System.h: 没有那个文件或目录 30 | #include"../../../include/System.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/xu/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc:31:9: fatal error: ../../../include/System.h: 没有那个文件或目录 31 | #include"../../../include/System.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ /home/xu/ORB_SLAM3/Examples/ROS/ORB_SLAM3/src/ros_stereo_inertial.cc:34:9: fatal error: ../../../include/System.h: 没有那个文件或目录 34 | #include"../../../include/System.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. compilation terminated. compilation terminated. compilation terminated. make[2]: *** [CMakeFiles/Stereo_Inertial.dir/build.make:63:CMakeFiles/Stereo_Inertial.dir/src/ros_stereo_inertial.cc.o] 错误 1 make[2]: *** [CMakeFiles/Mono_Inertial.dir/build.make:63:CMakeFiles/Mono_Inertial.dir/src/ros_mono_inertial.cc.o] 错误 1 make[2]: *** [CMakeFiles/Mono.dir/build.make:63
03-25
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值