проблемы с memset в Metal C - PullRequest
       38

проблемы с memset в Metal C

3 голосов
/ 03 июня 2009

Я пытаюсь инициализировать среду 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 &lt string.h&gt
   #include &lt stdlib.h&gt
   #include &lt metal.h&gt
   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;

Ответы [ 4 ]

3 голосов
/ 09 июня 2009

Проблема была с порядком поиска. Несмотря на то, что я выполнял поиск (/ usr / metal / include) с помощью with в моем JCL, я не стал использовать опцию переноса носителей, поэтому string.h собирался из стандартных системных библиотек вместо версии, включенной в Metal C. Я вставил свой набор данных optfile, который передал в CPARM ниже для справки.

//OPTIONS DD *
 SO
 LIST
 LONG
 NOXREF
 CSECT
 METAL
 LP64
 NOSEARCH
 search(/usr/include/metal/)
1 голос
/ 04 июня 2009

Можете ли вы показать нам свои аргументы компилятора? Вы должны убедиться, что вы не используете стандартные файлы заголовков 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
1 голос
/ 04 июня 2009

Итак, я понятия не имею. Но некоторые предложения:

  1. Вы можете попробовать скопировать / вставить этот код здесь из этого примера только для того, чтобы убедиться, что он работает "как положено"

  2. Может быть, попробовать определить некоторые макросы здесь ? (когда я занимался программированием на C на zOS, мне пришлось включить несколько странных макросов, чтобы заставить вещи работать. У меня нет разумного технического объяснения этому.)

  3. Вы можете попробовать поискать memset (), используя "= 3.14" (из ispf.) Посмотрите, используют ли другие функции эту функцию, и затем проверьте заголовки, которые они включают (или макросы, которые они определяют - либо в файлы C или H), чтобы заставить его работать.

  4. Еще одна мысль: перед memset () попробуйте вставить printf (). Если вы получаете синтаксическую ошибку в той же строке (только для printf, а не memset), вы можете увидеть, если проблема перед строкой 6 - как неправильно поставленные скобки.

  5. Наконец, если я правильно помню, мне пришлось скомпилировать свои отдельные модули, а затем связать их вручную (если я не написал JCL, чтобы сделать это для меня.) Поэтому вам, возможно, придется один раз связать, чтобы связать с другие модули, а затем снова связать с библиотекой C. Не для того, чтобы быть педантичным, но: вы уверены, что делаете все проходы по ссылкам?

Я понимаю, что есть много попыток, и вы, вероятно, уже читали руководства, но, может быть, есть что-то полезное, чтобы попробовать?

Кроме того, и вы, вероятно, уже знаете это, но этот сайт (для поиска кодов ошибок) бесконечно полезен. (вместе с вышеуказанными ссылками для полнотекстового поиска в руководстве)

Редактировать: эта страница также говорит о «встроенных функциях» - вы можете попробовать (как указано в нижней части страницы) «#undef memcpy» использовать не встроенную версию

0 голосов
/ 09 июня 2009

Вам не хватает закрывающей скобки '}' для функции? Как насчет каких-либо пропущенных ограничителей строки с запятой? При отсутствии скобок / точек с запятой компилятор z / OS C иногда выдает странные / вводящие в заблуждение сообщения. У меня нет его, чтобы попробовать, но я предполагаю, что Металл тоже.

...