如果要在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++开发工具。
- 启动用于NI Linux Real-Time的C/C++开发工具。
- 出现提示时,选择一个存储Eclipse项目的文件夹,然后单击OK 。
- 在Eclipse欢迎屏幕中,选择最右边的Workbench图标以打开工作台视图。
- 通过导航到File>>New>>C Project并选择Shared Library项目和Cross GCC Toolchain,以C/C++视角创建一个新项目。
- 选择Debug和Release配置进行创建
- 当提示您配置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。
- 在“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-应用。
- 在项目属性窗口中,选择C/C++ Build>>Settings,然后转到Tool Settings>>Cross GCC Compiler>>Miscellaneous部分。选择Position Independent Code-位置独立代码选项,然后Apply-应用。
- 转到Error Parsers-错误解析器选项卡。确保仅选择了GNU Assembler Error Parser, GNU 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代码中使用目标上的正确文件路径进行引用。