当前位置:  技术问答>linux和unix

小弟写了一个很简单的动态库实例函数用来学习,但编译通过之后执行可执行文件报错。跪请高手帮忙!!!!

    来源: 互联网  发布时间:2015-09-28

    本文导语:  环境: AIX 5L 主函数 ren.c 使用 test.c temp.c 这两个api生成动态库 libtest.so 供主函数调用 编译通过但执行可执行文件时报如下错: exec(): 0509-036 Cannot load program ren because of the following errors:         0509-151 ...

环境: AIX 5L
主函数 ren.c
使用 test.c temp.c 这两个api生成动态库 libtest.so 供主函数调用
编译通过但执行可执行文件时报如下错:
exec(): 0509-036 Cannot load program ren because of the following errors:
        0509-151 The program does not have an entry point or
                   the o_snentry field in the auxiliary header is invalid.
        0509-194 Examine file headers with the 'dump -ohv' command.

小弟不知所措  但在命令行中使用 cc 编译 却至少能够执行主函数中开始的printf语句
忘各位老师高手 多多帮忙!!!  小弟不胜感激

原码如下:
ren.c

#include 
#include 
#define  MAXLEN 8192

int
main()
{
   int   ilRc;
   char  name[MAXLEN];
   char  para[MAXLEN];
   FILE  *fp;
   int   (*func)();
   void  *Handle;

   printf("input funcname!!n");
   scanf("%s",name);
   printf("funcname is [%s]n",name);

   printf("input funcpara!!n");
   scanf("%s",para);
   printf("funcpara is [%s]n",para);

   if((fp = fopen("/home/switch/ramon/debug/main.debug","w")) == NULL)
   {
       printf("create debug file failed!!n");
       exit(-1);
   }

   Handle = dlopen("/home/switch/ramon/lib/libtest.so",RTLD_LAZY);
   if(Handle == NULL)  
   {
       fprintf(fp,"dlopen libtest.so failed!!n");
       exit(-1);
   }

   func = (int(*)())dlsym(Handle,name);
   if(func == NULL){
        fprintf(fp,"dlsym [%s] failed!!n",name);
        exit(-1);
   }

   ilRc = func(para);
   if(ilRc != 0){
        fprintf(fp,"func [%s] failed!!n",para);
        exit(-1);
    }
   dlclose(Handle);

   fprintf(fp,"opretion success!!n");
   fclose(fp);
}

temp.c:

#include 
int
temp(char *temp)
{
   printf("this is function temp!!n");
   printf("the string is [%s]!!n",temp);

}

test.c :

#include 

int
test(char *test)
{
   printf("this is function test!!n");
   printf("the string is [%s]!!n",test);
}

makefile:

INCLUDE= -I$(HOME)/ramon/include
LIBSO= -L$(HOME)/ramon/lib -ltest 
BIN= $(HOME)/ramon/bin
LIB= $(HOME)/ramon/lib

CC=cc

CCFLAG= -g -c 

.SUFFIXES:  .c .o

all: libtest ren clean

.c.o:
$(CC) $(CCFLAG) -o $*.o  $*.c

ren:ren.o
@echo Building "ren..."
$(CC) -G -o $(BIN)/ren ren.o $(LIBSO) -lc -lm

libtest:test.o temp.o
@echo ----Making dllLibraries-------
$(CC) -G -o libtest.so test.o temp.o -bE:libtest.exp -bM:SRE -bnoentry -lc
mv libtest.so $(LIB)/libtest.so

clean:
rm -f *.o


libtest.exp:
*
*******************************************
*    local service functions
*******************************************
*
#!libtest.o
test
temp
*
*******************************************
*     end define
*******************************************
*

多谢多谢了   高人解决   小弟另开贴散分  跪地叩首!!!!


|
好像你在生成temp.o,test.o的时候不对
gcc -fPIC -g -c test.c -o test.o 
gcc -fPIC -g -c temp.c -o temp.o
我没用你的makefile自己编译了一下
可以运行
另外ilRc=func(name)需要函数返回值
你的test,temp函数都没有返回值

|
我是这样调用

ren.c

#include 
#include 

void* slib=0;
int (*test) ();
int (*temp) ();

main()
{
slib=dlopen("libmongate.so",RTLD_LAZY);
hError=dlerror();
if (hError)
{
printf("dlopen Error!n");
return;
}
test=dlsym(slib,"test");
temp=dlsym(slib,"temp");
hError=dlerror();
if (hError)
{
printf("dlopen Error!n");
return;
}
         test();
         temp();
dlclose(slib);
if (hError)
{
printf("dlclose Error!n");
return;
}
}



|
ren.c的main()前加二行
int (*test) ();
int (*temp) ();

|
恕我冒昧
难道不需要加
-shared

    
 
 

您可能感兴趣的文章:

  • DataModule中如何执行SQL,判断数据是否存在??小弟是新人
  • 谁有win32平台用的tar、compress、uncompress执行文件?小弟叩谢!
  • 小弟刚学linux,问个超级幼稚的问题~-linux下怎么执行程序?
  • 小弟初步接触jsp 哪位大哥给我介绍一个好的编译器.
  • 小弟刚接触java,不知道大家现在都用什么编译源程序?
  • 小弟遇到个交叉编译的问题,谁能帮忙解决下啊
  • 大哥大姐们小弟刚学JAVA,对它没点头绪啊!能告诉我JAVA在什么环境下编写代码和编译吗??
  • 菜鸟问题,小弟刚刚使用LINUX不久,不知道如何使用编程工具进行编译和运行!
  • 小弟是菜鸟~!用Jbuilder7编译HELLO是出现了如下错误提示 :
  • 我如何在linux下写,编译一程序?小弟新学,谢谢
  • 各位大哥帮帮小弟吧,编译uClinux内核出错了
  • 小弟编了一个非常简化的多线程模拟电梯程序,编译通过,可是运行啥结果也没有,请高手指点!
  • 求助:驱动编译出现的问题!小弟折腾好几天了,始终不得其解,各位大侠指点一下 谢谢
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 大哥们,小弟我准备学JAVA了给推荐几本好书吧!小弟不胜感激啊!
  • 小弟问个问题,JDK哪有下载啊!小弟不胜感激啊!
  • linux高人!!!帮帮小弟啊,小弟是菜鸟
  • 哥们,谁有Jbuilder 4的注册码,给小弟解围,小弟谢先!!!
  • 小弟考试在即!望大哥们帮忙!!!跪求!!!
  • 哪位大哥给小弟一个squirrelmail的安装教程
  • 各位网络编程的大侠,帮帮小弟
  • OpenSSL安装过程中遇到的问题,希望大哥们帮帮小弟
  • 请各位大虾给小弟推荐几本好书
  • 小弟想在linux下访问windows 和usb的文件系统
  • 请问JBulider 4的序列号谁知到?能否提供给小弟?谢谢
  • 各位兄弟 谁有 powerZip 5.21 的注册码,小弟不胜感激!!
  • 小弟想用java做个sygate
  • 求教:文件打包移植错误发生排序错误,小弟努力送分送分啦!59~~~
  • 小弟急需要知道程序员查分网站。多谢!!!
  • 论坛 iis7站长之家
  • 小弟高分求“Linux 0.02版”的源代码!
  • 小弟是初学者,请推荐几本不错的unix书籍。
  • 小弟想学linux,推荐几本好书,有电子版下载的最好.
  • ★★★那位仁兄有Apache的源代码?小弟急用!多谢!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3