BOOST LOG 链接错误提醒

boost库编译完成后,运行官方的例子,编译时因没有提示容易出错,现把容易出错的点记录一下

    #include <boost/log/core.hpp>
  2 #include <boost/log/trivial.hpp>
  3 #include <boost/log/expressions.hpp>
  4 #include <boost/log/sinks/text_file_backend.hpp>
  5 #include <boost/log/utility/setup/file.hpp>
  6 #include <boost/log/utility/setup/common_attributes.hpp>
  7 #include <boost/log/sources/severity_logger.hpp>
  8 #include <boost/log/sources/record_ostream.hpp>
  9 #include <boost/log/support/date_time.hpp>
 10
 11 namespace logging = boost::log;
 12 namespace src = boost::log::sources;
 13 namespace sinks = boost::log::sinks;
 14 namespace keywords = boost::log::keywords;
 15 #if 0
 16 void init()
 17 {
 18     logging::add_file_log
 19     (
 20         keywords::file_name = "sample_%N.log",
 21         keywords::rotation_size = 10 * 1024 * 10
<think> 嗯,用户这次的问题是关于NI设备访问数据库时出错的解决方案。结合用户提供的引用内容,特别是引用[2]里提到的NI服务启动问题,以及引用[3]中Oracle的连接错误信息,需要重点排查几个方向。 用户可能正在使用NI的测试设备(比如PXI系统)连接工业数据库时遇到障碍。从引用[2]可以看出,NI服务的状态对设备运行至关重要。第一步应该确认所有NI后台服务是否正常运行,尤其是NIDeviceLoader这个关键服务。如果服务未启动,MAX配置工具就无法正常工作——这可能是数据库连接失败的根源。 注意到引用[3]显示了Oracle数据库的本地连接报错。这里有两个潜在问题:一是NI设备与数据库服务器之间的网络连通性问题;二是数据库用户权限配置错误。用户需要检查数据库监听器状态,同时确认NI设备使用的数据库账号是否具备远程访问权限——很多情况下开发环境的"LOCAL=YES"配置会阻止远程连接。 另外引用[4]提到Python连接HBase时的依赖库缺失问题,这提示NI设备驱动可能也存在类似环境缺陷。建议用户通过NI Package Manager检查驱动更新,特别是Database Connectivity Toolkit这类专门用于数据库交互的模块。 考虑到NI设备通常用于汽车测试等工业场景(如引用[1]所述),用户遇到的可能是特定行业的数据库协议问题。比如汽车行业常用的MDF数据库格式,就需要额外的NI DIAdem或DIAdem Advanced Analysis插件支持。 最后给出具体的排查步骤时,把服务重启放在第一步,因为这是最常见且最容易操作的解决方案(引用[2]明确描述了该操作流程)。网络测试采用telnet而不是ping,因为数据库端口开放与否才是关键。安全软件提示则源于工业计算机常安装杀毒软件阻断未知连接的实际情况。 </think> 针对NI设备访问数据库出错的问题,结合系统日志和引用内容,请按以下步骤排查: ### 一、基础服务检查(关键步骤) 1. **NI服务状态验证** ```bash # Windows系统执行 sc query NIDeviceLoader | findstr "STATE" ``` 若状态非`RUNNING`,需以管理员身份启动服务: ```bash net start NIDeviceLoader ``` 引用[2]明确指出服务未启动会导致MAX配置工具异常[^2] 2. **驱动兼容性确认** 在NI MAX中检查以下组件版本: - NI Database Connectivity Toolkit ≥ 20.0 - NI Driver Runtime ≥ 18.0 *建议通过NI Package Manager更新驱动套件* --- ### 二、连接故障排查 #### 网络层诊断 ```python import socket try: sock = socket.create_connection(("数据库IP", 端口), timeout=3) print(f"网络连通正常 (端口 {port} 开放)") except Exception as e: print(f"连接失败: {str(e)}") ``` #### 数据库权限检查(以Oracle为例) ```sql -- 查询NI设备所用账号权限 SELECT * FROM dba_sys_privs WHERE grantee = 'NI_DEVICE_USER'; ``` *需确保账号具备`CREATE SESSION`及目标表的操作权限[^3]* --- ### 三、配置修正方案 1. **通道配置校验** 参考引用[1]的通道配置规范: ```python # 示例中的关键配置项 channel_config = { "sampling_rate": 1000, # Hz "input_mode": "DIFFERENTIAL", # 差分模式抗干扰 "voltage_range": [-10, 10] # 量程需匹配传感器输出 } session.configure_channel("Dev1/ai0", **channel_config) # [^1] ``` 2. **连接字符串修正** 常见Oracle连接问题解决方案: ```python # 错误配置 conn_str = "oracle:user/pwd@localhost:1521/ORCL" # 修正为SERVICE_NAME模式 conn_str = "oracle:user/pwd@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=db_server)(Port=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))" ``` *引用[3]显示`LOCAL=YES`会导致远程连接失败[^3]* --- ### 四、高级调试手段 1. **启用NI诊断日志** 在MAX中开启详细日志: ``` 菜单 » 工具 » 生成诊断报告... ``` 检查报告中的`nidmgr.log`是否存在数据库驱动加载错误 2. **防火墙例外设置** 为以下进程添加出站规则: - `NiDbProvider.exe` - `nisyscfg.exe` - `nidim.exe` --- ### 典型错误解决方案 | 错误代码 | 原因 | 解决方法 | |----------------|-----------------------|------------------------------| | **-1074118656** | 驱动未加载 | 重装Database Connectivity Toolkit | | **-1074118642** | 连接字符串语法错误 | 使用NI连接测试向导重新生成 | | **-1074118631** | 数据类型转换失败 | 在LabSQL中配置类型映射表 | > **关键提醒**:若使用HBase等NoSQL数据库,需按引用[4]安装thrift依赖库: > `sudo yum install -y boost-devel libevent-devel python-devel`[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值