When files are located beneath certain special folders, callers that link to these files will link to them using a symbolic path, rather than an absolute or relative path. The symbolic path will be relative to the special folder. The following table lists these special folders and their symbolic path:
|symbolic path||description||actual path|
|<vilib>||NI Libraries and Addons||<LabVIEW>\vi.lib|
|<osdatadir>||Default file directory of the operating system||(OS Dependent)|
Note that some of these can have the actual path changed by changing the settings in Tools>>Options. The whole point of the symbolic path is to indicate "load from whatever location this path is currently defined to be."
For example, if you have a VI located in the following location:
<LabVIEW>\user.lib\_OpenG.lib\array\array.llb\Conditional Auto-Indexing Tunnel__ogtk.vi
Callers will link to this VI using the following symbolic path:
<userlib>\_OpenG.lib\array\array.llb\Conditional Auto-Indexing Tunnel__ogtk.vi
symbolic path are not generally encountered. They are used mostly under the hood of LabVIEW, for example, when using the Application Linker:Read Info From File and Linker:Write Info To File methods.
Resolving Symbolic Paths Programmatically
You can call the private Resolve Symbolic Path method to convert a Symbolic Path to an absolute path, as shown in the screenshot, below.
Auto update of symbolic paths
If you have a VI linked to another VI inside a symbolic path LabVIEW will automatically store the path symbolically. Here's the following use case:
Suppose you want to build a LabVIEW tool that resides under the Tools menu but is also accessible via the user.lib palette. What you can do is create a set-up upon built like this:
- Menu VI
- Actual VI
When you copy the contents of Built to the LabVIEW folder the Menu VI will have a relative path like ..\user.lib\Actual VI when you do a resave of the Menu VI the path will be changed to an absolute path <userlib>\Actual VI. Now you can move the Menu VI around without breaking it.
When Using Modules (FPGA, RT, etc)
A symbolic path may resolve to different actual files on disk depending upon which target the VI is loaded into. So a VI that is written to use <vilib>\a.vi may use <labview>\vi.lib\a.vi when loaded for the desktop target, but may use <labview>\vi.lib\fpga\a.vi when loaded for the FPGA target.