Questions on preptool configuration XML file
Here are a FAQ related to the preptool configuration
In the preptool configuration XML file, Consider this setup for MacOS as an example:
<items installpath="." runtimeloadpath="/Library/Frameworks/Adlm.framework/Versions/22a/Libraries" runtimeloadname="libadlmact_libFNP.dylib"> <item path="libadlmact.dylib" /> </items>
- How is the “installpath” attribute used?
It is the path where the "runtimelibrary" has to be created by the prep tool by extracting from the .yaa file.
Mostly the "installpath" and "runtimeloadpath" should be same
- How is the “runtimeloadpath” attribute used?
“runtimeloadpath” attribute is used to locate libadlmact_libFNP.dylib during runtime.
- Besides an absolute path, can we also specify a relative path?
Relative path might work and In Linux systems path starting with "~/" will also be expanded.
- If it is possible to specify a relative path, what is this path relative to?
This path is patched in the item using the libFNP.dylib in the case you have mentioned it will be patched in the "libadlmact.dylib", So it is relative to the executable or the library item path.
- Can we also use @rpath, @executable_path, and @loader_path when specifying the path?
No, but environment variables can be used to achieve the same.
- Can we specify more than one path to search for the dylib?
This is not possible as of now.
<items installpath="." runtimeloadpath="." runtimeloadname="libadlmact_libFNP.dylib"> <item path="libadlmact.dylib" /> </items>
"runtimeloadpath" seems to be relative to the directory that launches the application and loads libadlmact.dylib.
For example, in a Terminal window, when navigated to the home directory and launch the application, libFNP.dylib is not loaded but when it is placed in the same directory (not the home directory) as libadlmact.dylib. Instead, it is loaded when libFNP.dylib is placed in the home directory. How to fix this so that libFNP.dylib can loaded when it is placed in the same directory as libadlmact.dylib?
There are 2 ways:
One they can specify the hard coded path of libFNP.dylib in the "flxActCommonLibraryInit" instead of NULL as parameter.
Other way is that they have to get the path of the libadlmact.dylib during run time using some equivalent macos function calls like "GetMappedFileName" (in windows) and use that path to pass as parameter to the flxActCommonLibraryInit.