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

solaris上用gcc编译出的动态库老是无法找到导出函数

    来源: 互联网  发布时间:2016-06-26

    本文导语:  这个问题困扰我很久了,我有一段用于编译成动态库的源代码如下: 文件名是:libtest.c #include  #include "libtest.h" int interp_dll(char* filename) {    printf("invoke successful");    return 0; } 相应的头文件libtest.h很简单: #if...

这个问题困扰我很久了,我有一段用于编译成动态库的源代码如下:
文件名是:libtest.c

#include 
#include "libtest.h"

int interp_dll(char* filename)
{
   printf("invoke successful");
   return 0;
}

相应的头文件libtest.h很简单:
#ifndef _LIB_TEST_H
#define _LIB_TEST_H

int interp_dll(char* filename);

#endif

我用于调用动态库函数的的代码如下:

#include 
#include 
#include 

int (*interp_f)(char* filename);

int main(int argc, char* argv[])
{
   void* dllhandle;
  
   char* libname = argv[1];
   printf("library name is %sn",libname); 
   dllhandle = dlopen(libname ,RTLD_LAZY);


   if(!dllhandle)
   {
       char* err = dlerror();
       printf("Load library failure.error:%sn", err);
       return 0;
   }
   printf("load library successful");

   interp_f = (int(*)(char*))dlsym(dllhandle,"interp_dll");
   if(!interp_f)
   {
       char* err = dlerror();
       printf("can not locate the specify function "interp_dll",error:%sn",err);
       return 0;
   }
   int ret = interp_f("selt_calculation.ini");

   return ret;
}

文件名是dlltest.c


我用两种方式来生成所需要的动态库:

方法一:
1.先生成obj文件:gcc -c -o libtest.o libtest.c
生成了 libtest.o文件。
2.生成动态库libtest.so文件: gcc -G -o libtest.so libtest.o
这样我的调用代码可以正常加载动态库并成功执行interp_dll函数。

方法二:
1.先生成obj文件:gcc -c -o libtest.o libtest.c
生成了 libtest.o文件。
2.生成静态库文件:ar crv libtest.a libtest.o
生成了 libtest.a的静态库文件。
3.将静态库文件生成动态库文件: gcc -G -o libtest.so libtest.a
生成的动态库文件可以正常加载,但是问题出现了,调用的代码无法定位interp_dll函数,报错如下:

can not locate the specify function "interp_dll",error:ld.so.1: dlltest: fatal: interp_dll: can't find symbol

哪位大哥帮忙解决一下这个问题啊,因为公司给的代码是静态库,现在我想做成动态库然后调用,但是总是碰到这个错误,快急死我了。谢谢啦!!!!!!!!!!!!!!!!!!!!

我的分不多,麻烦知道的大哥大姐帮帮小弟啊。

|
gcc -I -L

For example,

#include 

/home/you/your_header.h

your_header.h  

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • solaris 10下的多线程和solaris 5.8下多线程编译有什么区别??
  • 请问各位高手,怎么样在windows上通过批处理脚步启动solaris上的编译器,实现自动编译?(solaris通过telnet登陆)?
  • 请问高手,在Solaris 8 gcc3.1编译的 *.o 和库文件 *.a ,可以提供在Solaris 7,9下使用吗?
  • 在linux+x86下用交叉编译器编译出能在solaris+x86运行的文件时遇到的问题
  • solaris 如何编译库
  • Solaris下编译器版本不同,编译后的物件大小不同?
  • 关于solaris安装,安装C/c++编译器的问题
  • solaris的编译环境的问题
  • 请问哪有Solaris下的GCC编译器下载??
  • solaris 安装cc编译器
  • solaris2.6下安装c编译器问题
  • 求Solaris下的GCC编译器
  • solaris9 静态库编译出错
  • 请教如何在solaris 8上安装c编译器
  • Solaris系统下,使用gcc编译程序,请问采用1字节对齐应该怎样设置
  • solaris下一个编译错误~请高人解答
  • 在sun solaris 8系统下有没有具编辑、编译、调试一体的集成C(C++)开发工具?谢谢!
  • solaris 下gcc 编译出错.
  • 晕了,solaris系统下,使用gcc -g选项编译出的程序,怎么没有调试信息
  • solaris下cc编译器连接时出错?
  • solaris 8上能用gcc for solaris7 或 solaris9的版本吗?
  • Solaris菜鸟!!!请问Solaris SPARC和Solaris x86这两个版本之间有什么具体的差异吗?
  • 请问Solaris现在最高的版本是多少?Solaris8.0价格如何?Solaris8.0和Red Hat Enterprise Linux AS 3.0有何区别?
  • 请教solaris高手一个solaris安装问题
  • 听说在solaris上运行java飞快,solaris有多大,如果不大,我想下载,哪有下载?
  • 请问:SOLARIS(for intel)如何装d-link网卡。哪儿下Solaris电子文档。
  • Solaris for X86 和Solaris for Sparc主要区别在哪?
  • 请问Solaris的优势?Solaris下开发相关及系统管理相关资料是否有提供?谢谢
  • telnet 进去的时候我看写着SUN OS5.8,这个是不是Solaris?我找不到Solaris5.8的软件?
  • 没有光碟,怎样从solaris8升级到solaris9?
  • solaris 10能不能远程桌面连接Solaris 10(或 Linux) ,不要安装其他软件


  • 站内导航:


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

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

    浙ICP备11055608号-3