GCC 错误提示

 我采用从共享库中载入函数的列子:

库中的两个函数项标准输出显示字符串,第一个函数为sayhell,显示他内部声明的串:

#include <stdio.h>
void sayhello()
{
 printf("hello from a loaded function/n");
}
第二个函数saysomething 需要传入字符串作参数:

#include <stdio.h>
void saysomething(char *string)
{
 printf("%s/n",string);
}
使用如下命令将这两个函数编译成为之独立的代码,并用他们创建共享库libsayfn.so:

   gcc -fpic -shared sayhello.c saysomething.c -o libsayfn.so

可动态的加载这些函数的程序使用4个基本函数。调用dlopen()将共享库载入内存(如果他不在内存中),返回的句柄可用来定位,调用dlsym()返回函数的地址。调用dlclose()从共享库中释放当前的程序。如果没有其他程序与他相连,就会从内存中卸载该动态库。函数dlerror()返回描述性字符串,描述最近调用的这些函数产生的任何可能的错误。如果没有发生错误,函数dlerror()返回NUll。

下面的程序载入共享库libsayfn.so,并执行其中包含的两个函数:

#include <dlfcn.h>
#include <stdio.h>

int main(int argc,char *argv[])
{
 void *handle;
 char *error;
 void (*sayhello)(void);
 void (*saysomething)(void);
 
 handle = dlopen("libsayfn.so",RTLD_LAZY);
 if(error = dlerror())
  {
   printf("%s/n",error);
   exit(1);
  }
  
  sayhello = dlsym(handle,"sayhello");
    if(error = dlerror())
  {
   printf("%s/n",error);
   exit(1);
  }
  
   
  sayhello = dlsym(handle,"saysomething");
    if(error = dlerror())
  {
   printf("%s/n",error);
   exit(1);
  }
  
  sayhello();
   saysomething("This is something");
  
   dlclose(handle);
}

函数main()顶端就声明了句柄,用来定位共享库,字符串字针包含所有错误信息的地址,可在库中找到每个函数的字针。

   编译本例的命令行,需要包含库,词库含有调用函数,如下:

gcc say.c -ldl -o say ;

错误提示

say.c: In function `main':
say.c:34: error: too many arguments to function

修改


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值