开发者

Code compiles on AIX 5.3 but not AIX 7.1 something to do with struct shl_descriptor where is this defined?

开发者 https://www.devze.com 2023-01-26 14:17 出处:网络
I have some code that looks similar to the following: #include <stdio.h> #include <sys/types.h>

I have some code that looks similar to the following:

#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;
}

What it is doing is enumerating all the shared libraries attached to the binary. This compiles fine on AIX 5.3 but on AIX 7.1 I am getting the following concerning lstModDesc:

"modulename.c", line 2553.30: 1506-285 (S) The indirection operator cannot be a pplied to a pointer to an incomplete struct or union.

I cannot find where shl_get is defined on my aix 5.3 box nor can I find where struct shl_descriptor is defined either. I am stumped. I even tried outputing the preprocessed output with the -E flag to the compiler with no luck. I did a recursive grep in /usr/include. Is there somewhere else I should be searching? Where are those definitions?


Are you sure that bit of the code was included in the compilation on AIX 5.3? I just went Google-whacking with 'site:ibm.com shl_descriptor' and there is precisely one item found:

  • http://www-01.ibm.com/support/docview.wss?uid=swg21212239

It is pointing to a problem on HP-UX with WAS (WebSphere Application Server). There is sample code which uses <dl.h> (dynamic loader), and shows shl_descriptor and shl_gethandle() and shl_load().

Given the complete absence of hits for anything in AIX and the presence of the HP-UX platform, then you have a slightly different problem to resolve. The question is:

  • Why is the conditional compilation on AIX 5.3 excluding the section that uses shl_descriptor and not excluding it on AIX 7.1. You should look at the conditions wrapped around that code in the #ifdef line, and see what is used to trigger the HP-only compilation on AIX 5.3.
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号