プロシージャ名およびエントリ ポイント名での非標準文字の使用

Open PL/I コンパイラでは、@ 記号や $ 記号などのシンボルを含むソース コードをコンパイルしますが、これらのシンボルを使用すると、オペレーティング システムによっては問題が発生する可能性があります。

このようなプロシージャが内部プロシージャまたは静的にリンクされたプロシージャである場合は問題なく動作しますが、共有オブジェクトまたは .dll のようにシンボルをエクスポートする必要がある場合は、プログラムのリンクに関する問題が発生する可能性があります。

Windows では、「@」記号は .DEF ファイルでリンクされている順序値を表すために使用され、Microsoft リンカー バージョン 11.00.61030.0 以前では、「@」記号を含む .DEF ファイルにおいてエクスポートされたシンボルを処理できません。

Linux でシンボル名に「@」記号を使おうとすると、リンク時に問題が発生する可能性があります。これは、Linux の「ld」リンカーによって「@」が「バージョン付き」シンボル名に関連付けられ、正しくリンクしないためです。

「$」の使用はそれほど問題になりませんが、AIX および Solaris では、リンカーが「$」記号とアセンブラーを混同するため、正常にリンクできない問題が発生する可能性があります。

これらのシンボルがあり、アプリケーションを共有オブジェクトまたは .dll に正常にリンクできない場合は、問題の文字を取り除くグローバルな変更を行うことができます。また、マクロ プリプロセッサおよび -incafter オプションを使用することもできます。Enterprise Developer 2.2 Update 2 以前では、シンボルを自動的に変更するための 2 次パスが必要になりますが、すべての修正プログラムが適用されている Enterprise Developer 2.3 Update 1 以降では、マクロ プリプロセッサおよび -incafter オプションを使用するだけで修正できます。基礎となるオペレーティング システムで共有オブジェクトまたは DLL における特殊文字を処理できない場合は、引き続き問題が発生する可能性がありますが、これはケースバイケースであり、一般的でありません。