Skip to content

编译与验证指南 ​

本页说明如何在没有连接实物控制器的情况下,验证二次开发程序是否「写对了」。适用于上位机 SDK(默认开发方式);示例以 C++ 为主,C# / Python 见第 6 节。

1. 三级验证 ​

级别验证内容通过标准
L1 语法检查头文件引用、类型、语法错误编译器无报错
L2 编译 + 链接库文件齐全、ABI 匹配(编译器、x86/x64、Debug/Release)成功生成可执行文件
L3 运行自检可执行文件能启动、SDK 库能加载、连接调用能执行未接控制器时走到「连接失败」提示

为什么要做 L3

L3 能在无硬件条件下验证:程序能启动、动态库能被加载、接口调用路径成立。接入控制器后,同一程序只需替换 IP 即可完成真实联调。

2. L1:语法检查(最快) ​

bash
# MinGW / Linux(g++;包含目录按你的工程结构调整)
g++ -fsyntax-only -I ./include main.cpp

# MSVC(在「开发者命令提示符」中执行)
cl /Zs /I include main.cpp

语法检查只验证代码本身,不检查库文件与链接关系。

3. L2:编译 + 链接 ​

各环境的完整工程配置(头文件路径、库文件、动态库复制等)见环境搭建教程:

Linux(与教程中的 Makefile 一致):

bash
g++ -o demo src/*.cpp -I./include -L./lib -lnrc_host -lpthread -lm -ldl -lrt -lstdc++ -std=c++11 -fPIC
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH
./demo

链接阶段常见错误对照:

现象常见原因处理
undefined reference / LNK2019 找不到符号库未链接,或编译器 ABI 不匹配确认链接了 nrc_host 库文件,且与编译套件(MinGW/MSVC)一致
找不到 nrc_host.lib / libnrc_host.dll.a库搜索路径不对检查 -L 路径 / 附加库目录配置
架构不匹配报错32 位与 64 位混用程序与库统一 x64

4. L3:无硬件运行自检 ​

编译出可执行文件后直接运行(不需要控制器),对照下表判断:

运行结果说明
等待数秒后输出「连接失败」并正常退出可执行文件、SDK 动态库加载、连接调用路径均正常(未接控制器属预期结果)
提示缺少 nrc_host.dll / libnrc_host.so动态库不在查找路径:Windows 将 DLL 放到可执行文件同目录;Linux 设置 LD_LIBRARY_PATH
启动即崩溃或报 0xC000007B架构或编译器不匹配(x86/x64、MinGW/MSVC 混用),更换对应 SDK 重新编译
长时间无响应检查程序逻辑(如等待连接就绪的循环)以及防火墙 / 网络配置

等待时长取决于系统的连接超时设置,通常几秒到数十秒。

自检通过后再接入控制器做真实联调:把示例中的 IP 换成现场控制器 IP 即可。

5. 仿真验证(待补充) ​

仿真环境(虚拟控制器)的接入方式确认后补充到本节,预计包含:仿真环境启动方式、连接参数(IP / 端口)、支持的指令范围。在此之前,请以第 4 节的编译级验证为准。

6. C# 与 Python 的差异 ​

  • C#:编译由 Visual Studio 或 dotnet build 完成;运行时确认 nrc_host.dll 位于输出目录(环境搭建教程中有「复制到输出目录」配置)。运行自检判断方式相同,见 C# 环境搭建。
  • Python:无需编译,直接用解释器运行;确认本地库(_nrc_host)与 Python 版本、架构严格匹配,见 Python 环境搭建。
  • 两者运行自检同样以「连接失败」分支输出为准。

7. 相关页面 ​