我有一些代码类似于以下内容:

#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)间接运算符不能是
应用于指向
结构或联合。
我找不到在aix 5.3框中定义shl_get的位置,也找不到在哪里定义struct shl_描述符。我被难住了。我甚至尝试用-E标志将预处理的输出输出输出给编译器,但没有成功。我在/usr/include中做了一个递归grep。还有别的地方我应该找吗?这些定义在哪里?

最佳答案

您确定AIX 5.3上的编译中包含了这段代码吗?我刚用“site:ibm.com shl_descriptor”搜索了一下Google,发现了一个条目:
http://www-01.ibm.com/support/docview.wss?uid=swg21212239
它指出了HP-UX和WAS(WebSphere应用程序服务器)上的一个问题。有使用<dl.h>(动态加载程序)的示例代码,并显示shl_descriptorshl_gethandle()以及shl_load()
考虑到AIX中的任何东西都完全没有命中,而且HP-UX平台也存在,那么您需要解决的问题略有不同。问题是:
为什么AIX 5.3上的条件编译不包括在AIX 7.1上使用shl_descriptor的部分,而不排除它。您应该查看#ifdef行中围绕该代码的条件,并查看用于触发AIX 5.3上仅限HP的编译的内容。

关于c - 代码在AIX 5.3上编译,但不能在AIX 7.1上编译,这与struct shl_descriptor有关。在哪里定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4247220/

10-14 06:05