Use of Nonstandard Characters for Procedure and Entry Point Names

The Open PL/I Compiler compiles source code that contains symbols such as the @ sign and $ sign but the use of these may cause issues depending on the operating system.

Everything will work as expected if these procedures are internal or statically linked but if you need to export the symbol as you would do for a shared object or a .dll, you may encounter issues with linking your program.

On Windows, the "@" sign is used in .DEF files to denote the ordinal value being linked and the Microsoft Linker Version 11.00.61030.0 and earlier will not tolerate an exported symbol in a .DEF file which contains the "@" symbol.

If you attempt to use the "@" sign in symbol name on Linux you may encounter problems when linking as the "ld" linker on Linux appears to associate the "@" with "versioned" symbol names and will not link correctly.

The use of "$" is not as problematic but on AIX and Solaris you may encounter issues with the linker where it will be unable to successfully link because it confuses the "$" symbol with assembler.

If you encounter these symbols and have problems successfully linking your application into a shared object or a .dll, you can do a global change eliminating the offending character. You can also utilize the macro preprocessor and the -incafter option. It will require a secondary pass to automatically change the symbol in Enterprise Developer 2.2 Update 2 and earlier, but with Enterprise Developer 2.3 Update 1 or later with all hotfixes applied it can be remediated just using the macro preprocessor and the -incafter option. You may still encounter issues if the underlying operating system does tolerate the special symbols in shared objects or DLLs but those will be on a case by case basis and are not common.