在NI Linux RT目标上将.so文件与LabVIEW RT或VeriStand一起使用

更新 Mar 17, 2021

环境

软件

  • LabVIEW Real-Time Module
  • C/C++ Development Tools

我已经用C或C++编写了代码,并希望将其作为.so文件通过LabVIEW或VeriStand运行在Linux RT目标上。如何将编写的代码编译成.so文件?

如果要在LabVIEW中从.so文件中调用函数,则可以使用“调用库函数”节点来实现。但是,.so文件必须专门针对所使用的实时目标进行编译。这可以通过C或C++代码以及免费工具适用于NI Linux Real-Time的C/C++开发工具来完成。您可以从实时控制器和实时操作系统兼容性检查cRIO的操作系统。

找到说明后,要将代码编译成.so文件必须执行的操作:
  • 安装Java(建议使用Java SE 6或更高版本),您可以在Java下载页面上进行下载。
  • 安装用于NI Linux Real-Time Eclipse Edition的C/C++开发工具。
对于LabVIEW 2017和LabVIEW 2018,请安装用于NI Linux Real-Time的Eclipse Edition 2017-2018的C/C++开发工具
  • 启动用于NI Linux Real-Time的C/C++开发工具。
  • 出现提示时,选择一个存储Eclipse项目的文件夹,然后单击OK
  • 在Eclipse欢迎屏幕中,选择最右边的Workbench图标以打开工作台视图。
  • 通过导航到File>>New>>C Project并选择Shared Library项目和Cross GCC Toolchain,以C/C++视角创建一个新项目。


项目设置文件
 
  • 选择DebugRelease配置进行创建
  • 当提示您配置Cross GCC前缀和路径时,请从下面的列表中为您的NI Linux Real-Time目标选择合适的路径和前缀,并在以下屏幕截图中显示英特尔x64目标:
前缀:
(基于ARM的目标,2013软件栈)
arm-none-linux-gnueabi-
(基于ARM的目标,2014和2017软件栈) arm-nilrt-linux-gnueabi-
(基于Intel x64的目标,2014和2017软件栈) x86_64-nilrt-linux-
路径:
(基于ARM的目标,2013软件栈) \ <National Instruments> \ Eclipse \ toolchain \ gcc-4.4-arm \ i386 \ bin
(基于ARM的目标,2014软件栈) \ <National Instruments> \ Eclipse \ 14.0 \ arm \ sysroots \ i686-nilrtsdk-mingw32 \ usr \ bin \ armv7a-vfp-neon-nilrt-linux-gnueabi
(基于ARM的目标,2017软件栈) C:\ build \ 17.0 \ arm \ sysroots \ i686-nilrtsdk-mingw32 \ usr \ bin \ arm-nilrt-linux-gnueabi
(基于Intel x64的目标,2014软件栈) \ <National Instruments> \ Eclipse \ 14.0 \ x64 \ sysroots \ i686-nilrtsdk-mingw32 \ usr \ bin \ x86_64-nilrt-linux
(基于Intel x64的目标,2017软件栈)C:\build \ 17.0 \ x64 \ sysroots \ i686-nilrtsdk-mingw32 \ usr \ bin \ x86_64-nilrt-linux
 
  • 通过右键单击项目文件夹并选择“导入”来导入.c文件现在,您可以在此处选择文件,并将其添加到您的项目中。
  • 完成后,您的Project Explorer窗格应该如下图所示。在这个例子中,engine.c是我们想要编译成so文件的C文件。如果你正在编译一个Veristand模型的so文件,你需要包含ni_modelframework.c和ni_modelframework.h。

添加的文件.PNG
  • 在“Project Explorer-项目资源管理器”选项卡中右键单击您的项目,然后选择“Properties-属性”
  • 在“Properties-属性”对话框的左窗格中选择“C/C++ Build”。
  • 从“Builder type-构建器类型”下拉菜单中选择“ Internal builder-内部构建器”以进行调试配置。
  • 在“Properties-属性”对话框的左窗格中,选择C/C++ Build 下的“Settings-设置”。
  • 在“Tool Settings-工具设置”选项卡中的“Cross GCC Compiler”下选择“Miscellaneous-其他” 。在“Other flags-其他标志”文本框中,在现有文本之后添加一个空格,然后输入以下值之一:
(基于ARM的目标,2017软件栈)-- sysroot = C:\ build \ 17.0 \ arm \ sysroots \ cortexa9-vfpv3-nilrt-linux-gnueabi
(基于Intel x64的目标,2017软件栈)-- sysroot = C:\ build \ 17.0 \ x64 \ sysroots \ core2-64-nilrt-linux
  • 在“Tool Settings -工具设置”选项卡中的“Cross GCC Linker”下选择“ Miscellaneous-其他”,然后在“Linker flags-链接器标志”文本框中输入以下值之一:
(基于ARM的目标,2017软件栈)-- sysroot = C:\ build \ 17.0 \ arm \ sysroots \ cortexa9-vfpv3-nilrt-linux-gnueabi
(基于Intel x64的目标,2017软件栈)-- sysroot = C:\ build \ 17.0 \ x64 \ sysroots \ core2-64-nilrt-linu
  • 在“项目属性”窗口中导航到C/C++ General>>Paths and Symbols。转到“Symbols-符号”选项卡,然后选择“Add-添加” 。输入名称kNIOSLinux的符号,点击OK ,然后Apply-应用


SetSymbol.PNG
 
  • 在项目属性窗口中,选择C/C++ Build>>Settings,然后转到Tool Settings>>Cross GCC Compiler>>Miscellaneous部分。选择Position Independent Code-位置独立代码选项,然后Apply-应用


图片素材
 
  • 转到Error Parsers-错误解析器选项卡。确保仅选择了GNU Assembler Error ParserGNU gmake Error Parser 7.0, GNU Linker Error Parser选项,然后按Apply


错误解析器
 
  • 转到C/C++ Build>>Settings>>Cross GCC Compiler然后添加编译器命令-fvisibility = protected,以指示GCC将符号可见性设置为protected。点击 Apply-应用 ,然后按“OK-确定”关闭属性窗口。
  • 在菜单栏中选择Project>>Build Project(项目>>生成项目),以生成项目的可执行文件。
必须将生成的.so文件通过FTP或WebDAV以适当的权限放置在目标上的目录中,并在LabVIEW代码中使用目标上的正确文件路径进行引用。