Enhanced shared library support on AIX
In older versions of the AIX operating system, shared libraries were not supported. A work-around solution was to include an EsUserPrimitive table and make this table the entry point for the library module. The .a suffix was used by default for libraries of this type. These special load modules have been commonly referred to as "willie" files and given an explicit .w suffix to differentiate them from normal load modules with the .a suffix.
The currently supported versions of AIX have implemented full shared library support. Therefore, VA Smalltalk searches first for a library with a .so prefix, and if it finds a file of this name it will use the operating system's dynamic load mechanism to access the specified shared library. If it fails to find a .so file, the search continues looking for an .a library and assumes that an .a file implements the work-around solution.
The current search algorithm for loading shared objects and load modules is as follows:
1. Call dlopen with the name specified in the PlatformFunction.
2. On fail, add the .so suffix to the name specified in the PlatformFunction and call dlopen.
3. On fail, add the lib prefix and the .so suffix to the name specified in the PlatformFunction and call dlopen.
4. On fail, call load with the name specified in the PlatformFunction.
5. On fail, add the .a suffix to the name specified in the PlatformFunction and call load.
In the past, we recommended that you always let the virtual machine supply the suffix as this allows you to write Smalltalk code that is not bound to a particular operating system. However, with this new shared object support, it is critical that you follow this recommendation if you are attempting to access a "willie" file. This is because the AIX dlopen function successfully opens a "willie" file in Step 1 above. However, it does not successfully find the correct entry point. There is no way to force a "willie" file with an explicit suffix to resolve at Step 4.
If you use "willie" files on AIX and if you code an explicit suffix on the libraryname parameter of the PlatformFunction creation method, you must change this method call by removing the explicit suffix. This may also entail renaming your "willie" file.
Last modified date: 07/02/2019