簡體   English   中英

Metal C中的memset問題

[英]problems with memset in Metal C

我正在嘗試使用以下代碼初始化Metal C環境,但在memset行上會出現以下錯誤。 ERROR 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 / metal / include),但我沒有使用nosearch選項,因此string.h從標准系統庫中取而代之,而不是Metal C中包含的版本。我已粘貼我傳遞給下面的CPARM的optfile數據集以進行參考。

//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()放入。如果在同一行上出現語法錯誤(僅用於printf,而不是memset),那么你可以看到問題是否在第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編譯器有時會拋出一些奇怪的/誤導性的消息。 我沒有嘗試,但我認為Metal也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM