質問

次のコードで Metal C 環境を初期化しようとしていますが、memset 行で次のエラーが発生します。エラー CCN3275 IMIJWS0.METAL.SAMPLIB(MEM):6 予期しないテキスト ')' が見つかりました。エラー CCN3045 IMIJWS0.METAL.SAMPLIB(MEM):6 宣言されていない識別子 ___MEMSET。エラー CCN3277 IMIJWS0.METAL.SAMPLIB(MEM):6 構文エラー:「)」または「,」が欠落している可能性がありますか?CCN0793(I) ファイル //'IMIJWS0.METAL.SAMPLIB(MEM)' のコンパイルに失敗しました。オブジェクトファイルが作成されていません。以下は私のコードです


   #include < string.h>
   #include < stdlib.h>
   #include < metal.h>
   void mymtlfcn(void)  {
   struct __csysenv_s mysysenv;
   memset ( &mysysenv, 0, sizeof ( mysysenv ) );
   mysysenv.__cseversion = __CSE_VERSION_1;
   mysysenv.__csesubpool = 129;
   mysysenv.__cseheap31initsize = 131072;
   mysysenv.__cseheap31incrsize = 8192;
   mysysenv.__cseheap64initsize = 20;
   mysysenv.__cseheap64incrsize = 1;

役に立ちましたか?

解決

問題は、検索順序とありました。私は私のJCL内での検索をディレクトリ(/ usr /金属/含める)でしたが、私はnosearchオプションでそれを進まなかったので、string.hのではなく、バージョンの標準システムのlibrarysからピックアップなったメタルC.に付属の私はrefferenceについては、以下のCPARMに渡された私のoptファイルのデータセットを貼り付けました。

//OPTIONS DD *
 SO
 LIST
 LONG
 NOXREF
 CSECT
 METAL
 LP64
 NOSEARCH
 search(/usr/include/metal/)

他のヒント

だから、私には分かりません。しかし、いくつかの提案があります:

  1. このコードをここにコピー/ペーストしてみてください。 この例 「期待通り」に動作することを確認するためだけに

  2. いくつかのマクロを定義してみてください ここ?(zOS で C プログラミングを行ったとき、機能させるためにいくつかの奇妙なマクロを組み込む必要がありました。これについては合理的な技術的説明がありません。)

  3. "=3.14" (ispf から) を使用して memset() を検索してみてください。他のモジュールがその関数を使用しているかどうかを確認し、そのモジュールに含まれるヘッダー (または定義されているマクロ - C ファイルまたは H ファイルのいずれか) を確認してください。 )それを機能させるために。

  4. もう一つの考え:memset() の前に printf() を入れてみてください。同じ行で構文エラー (memset ではなく printf のみ) が発生した場合は、問題が 6 行目より前にあるかどうか (括弧の置き間違いなど) を確認できます。

  5. 最後に、私の記憶が正しければ、個々のモジュールをコンパイルしてから、それらを手動でリンクする必要がありました (これを行うための JCL を作成した場合を除く)。そのため、他のモジュールとリンクするには一度リンクしてからリンクする必要があるかもしれません。再び C ライブラリに対して。衒学的ではありませんが、次のとおりです。すべてのリンク パスを実行しているとかなり確信していますか?

試すのは大変なことだとは思いますし、おそらくマニュアルはすでに読んでいると思いますが、何か試してみると役に立つことがあるかもしれません。

あと、もうご存知かと思いますが、 このサイト (エラーコードを調べるために)非常に便利です。(マニュアルの全文検索のための上記のリンクも併せて)

編集: このページ また、「組み込み関数」についても説明しています。(ページの下部に記載されているように) 非組み込みバージョンを使用するには、「#undef memcpy」を試してみてはいかがでしょうか?

あなたは私達にあなたのコンパイラの引数を表示することができますか?あなたは金属Cのものに加えて、標準のCヘッダファイルに引っ張っていないことを確認する必要があります。ここでは例があります:

xlc -c -Wc,metal,longname,nosearch,'list(./)'  -I. -I /usr/include/metal -I "//'SYS1.SIEAHDRV'" -S -qlanglvl=extended foo.c
as -mrent -mgoff -a=foo.list -o foo.o foo.s
ld -bac=1 -brent -S "//'SYS1.CSSLIB'" -o foo foo.o

あなたは機能のために「}」閉じ括弧が欠落していますか?どのように任意の不足しているセミコロンラインターミネータは?ブレース/セミコロンが欠落した場合のz / OSのCコンパイラは時々いくつかの奇妙な/誤解を招くメッセージをスローします。私はそれを試してみる必要はありませんが、私は金属が同様にありませんと仮定しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top