LabVIEW是怎么找到调用库函数节点CLN所对应的共享库的?



主要软件:
主要软件版本: 2011
主要软件修正版本: 2011
次要软件: LabVIEW Development Systems>>LabVIEW Full Development System, LabVIEW Development Systems>>LabVIEW Professional Development System

问题: 我在LabVIEW中配置的一个调用库函数节点无法找到调用库函数对话框中所配置的共享库。我需要将该共享库放置到什么位置,才能让LabVIEW找到它?

解答:
当调用库函数节点尝试加载由文件名指定的共享库(相对于由路径指定),LabVIEW根据不同的平台,有不同的寻找算法。因此,你必须将共享库保存在系统搜索算法会检查的路径下。根据不同的平台,查看下文,获取labVIEW在不同平台下会搜索的文件夹路径。

Windows
Linux
Mac OS X

说明:本文档只针对使用文件名指定共享库的情况。如果您使用路径指定共享库,LabVIEW将使用它本身的算法定位该共享库。使用路径指定共享库会在您发布和迁移VI和程序时导致异常的结果。在LabVIEW帮助文档中参看Specifying the Locations of Shared Libraries on Disk(链接见底部) 获取更多相关信息,和LabVIEW如何通过路径加载共享库。

Windows

在Windows 使用文件名指定共享库,LabVIEW 是通过 Win32 函数 LoadLibraryEx,指定其标志LOAD_WITH_ALTERED_SEARCH_PATH,定位共享库位置的。MSDN Dynamic-Link Library Search Order(链接见底部) ,列出了这个函数会搜索的路径。LabVIEW 对这个搜索过程做了以下的修改:

Linux

在Linux 使用文件名指定共享库,LabVIEW 是通过调用 dlopen 函数,指定其参数modeRTLD_NOW。 更多信息请参考 dlopen 的主页。此函数会搜索以下路径:

LabVIEW 没有定义LD_LIBRARY_PATH_CS_LIBPATH的值,但是LabVIEW 会指定以下路径为RPATH

对于在LabVIEW 开发环境下运行的VI,RPATH 包涵以下路径,依次为:

General LocationMost Common Path
<labview>/patchlib/usr/local/natinst/LabVIEW <year>
/usr/X11R6/lib/usr/X11R6/lib
/usr/lib/usr/lib
<labview>/usr/local/natinst/LabVIEW <year>
<labview>/linux/usr/local/natinst/LabVIEW <year>/linux
<labview>/resource/usr/local/natinst/LabVIEW <year>/resource

对于在LabVIEW Run-Time 运行下的LabVIEW生成程序,RPATH 包涵以下路径,依次为:

General LocationMost Common Path
<labview RTE>/patchlib/usr/local/lib/LabVIEW <year>/patchlib
<labview RTE>/usr/local/lib/LabVIEW <year>
patchlib directory in the parent directory of <labview RTE>/usr/local/lib/patchlib
/usr/X11R6/lib/usr/X11R6/lib
/usr/lib/usr/lib
parent directory of <labview RTE>/usr/local/lib
<labview RTE>/linux/usr/local/lib/LabVIEW <year>/linux
linux directory in the parent directory of <labview RTE>/usr/local/lib/linux
resource directory in the parent directory of <labview RTE>/usr/local/lib/resource

Mac OS X

在Mac OS 使用文件名指定共享库,LabVIEW 能加载 frameworks 和 dylibs. LabVIEW 会首先尝试将这两种共享库作为 framework 加载,搜索以下目录,依次为:

General LocationMost Common Path
Application's private framework directoryLabVIEW.app/Contents/Frameworks or <Application>.app/Contents/Frameworks
<labview>/resource/Applications/National Instruments/LabVIEW <year>/resource
User Frameworks directory~/Library/Frameworks
<User Application Support>/National Instruments and all subdirectories~/Library/Application Support/National Instruments and all subdirectories
Local Frameworks directory/Library/Frameworks
<Local Application Support>/National Instruments and all subdirectories/Library/Application Support/National Instruments and all subdirectories
System Frameworks directory/System/Library/Frameworks
System Private Frameworks directory/System/Library/PrivateFrameworks

如果LabVIEW 以framework 加载共享库失败,LabVIEW 会使用dlopen 函数,尝试以 dylib 的方式加载共享库。参看

Mac OS X Developer Library: dlopen(3) Mac OS X Manual Page (链接见底部) 获取此函数的搜索目录顺序。

说明: 如果指定一个共享库为 library.*,LabVIEW会将 .*替换为.framework



相关链接:
LabVIEW 2011 Help: Specifying the Locations of Shared Libraries on Disk
MSDN: Dynamic-Link Library Search Order
Mac OS X Developer Library: dlopen(3) Mac OS X Manual Page

附件:





报告日期: 05/09/2011
最近更新: 09/03/2013
文档编号: 5L889HX1