Код компилируется в AIX 5.3, но не в AIX 7.1, что-то связанное с struct shl_descriptor, где это определяется? - PullRequest
0 голосов
/ 22 ноября 2010

У меня есть код, похожий на следующий:

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <stdarg.h>
#include <sys/ldr.h>

int main (int argc, char **argv)
{
   int                      liRC = 0;
   struct shl_descriptor    *lstModDesc;
   int                      liEach;
   char                     lsBaseName[513];
   char                     *lsTheName;

   for( liEach = 0; liRC == 0; liEach++ )
   {
      liRC = shl_get( liEach, &lstModDesc );
      if( liRC == 0 )
      {
         strcpy( lsBaseName, lstModDesc->filename );
         lsTheName = (char *)basename( lsBaseName );
         /* do more stuff */
      }
   }
   return 0;
}

Что он делает, перечисляет все разделяемые библиотеки, присоединенные к двоичному файлу.Это прекрасно компилируется в AIX 5.3, но в AIX 7.1 я получаю следующее относительно lstModDesc:

"modulename.c", строка 2553.30: 1506-285 (S) Оператор косвенного обращения не может быть применен куказатель на неполную структуру или объединение.

Я не могу найти, где shl_get определен в моем окне aix 5.3, а также не могу найти, где определен struct shl_descriptor.Я в тупике.Я даже безуспешно пытался вывести предварительно обработанный вывод с флагом -E на компилятор.Я сделал рекурсивный grep в / usr / include.Где-то еще я должен искать?Где эти определения?

1 Ответ

4 голосов
/ 22 ноября 2010

Вы уверены, что часть кода была включена в компиляцию в AIX 5.3?Я просто пошёл в Google с помощью site: ibm.com shl_descriptor, и там был найден только один элемент:

Указывает на проблему в HP-UX с WAS (WebSphere Application Server).Существует пример кода, который использует <dl.h> (динамический загрузчик) и показывает shl_descriptor и shl_gethandle() и shl_load().

Учитывая полное отсутствие попаданий для чего-либо в AIX и наличие HP-UX платформы, то вам нужно решить проблему немного по-другому.Вопрос:

  • Почему условная компиляция в AIX 5.3 исключает раздел, который использует shl_descriptor, а не исключает его в AIX 7.1.Вы должны посмотреть на условия, обернутые вокруг этого кода в строке #ifdef, и посмотреть, что используется для запуска компиляции только для HP в AIX 5.3.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...