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

高分求救,linux下的动态链接库使用

    来源: 互联网  发布时间:2016-05-31

    本文导语:  我照着这个帖子学习动态链接库 http://www.moon-soft.com/download/info/2642.htm 到了要生成libmy.so这个动态链接库的时候,由于作者提供的是makefile,我测试它的makefile有错,报 makefile-lib:8: *** missing separator.  Stop. 我makefile语法...

我照着这个帖子学习动态链接库
http://www.moon-soft.com/download/info/2642.htm

到了要生成libmy.so这个动态链接库的时候,由于作者提供的是makefile,我测试它的makefile有错,报
makefile-lib:8: *** missing separator.  Stop.



我makefile语法不太熟悉,所以继续不下去.
于是自己用gcc  -fpic -shared -o libmy.so  getdate.c gettime.c 来生成了libmy.so  这个链接库.
这些.c跟.so以及 datetime.h 都在/root/dll_test_work文件夹里,然后我把libmy.so  拷贝到/lib文件夹下.
(我想问下,我自己执行的这条指令没有对datetime.h的依赖,生成的.so可用不?因为后面问题来了.)


我想使用这个动态链接库,就照着/* 文件名称: dy.c */ ,像作者说的那样,写完,然后编译,
同理,它是makefile,我是 gcc -rdynamic -s -o dy dy.c -ldl
这样编译,然后错误一堆,

dy.c: In function `main':
dy.c:10: `DATETYPE' undeclared (first use in this function)
dy.c:10: (Each undeclared identifier is reported only once
dy.c:10: for each function it appears in.)
dy.c:10: parse error before "d"
dy.c:11: `TIMETYPE' undeclared (first use in this function)
dy.c:25: `getdate' undeclared (first use in this function)
dy.c:34: `getdate' used prior to declaration
dy.c:34: `d' undeclared (first use in this function)
dy.c:37: `gettime' undeclared (first use in this function)
dy.c:46: `gettime' used prior to declaration
dy.c:46: `t' undeclared (first use in this function)
[root@localhost use_lib]# gcc  -o dy  -ldl dy.c


基本上就是无法调用,该链接库.求高手帮我搞定,或者让他那个makefile可以执行也可以.谢谢,搞定的话,分还可以加.



|
你知道吗?你这是在误入歧途...

我给你写个最简单的动态库生成及使用的例子吧,仅供你参考:

//这个是库的代码
#include 

void fun()
{
        printf("In libfun.son");
}

//下面是测试代码
#include 

int main()
{
        printf("Call libfun.son");
        fun();
        printf("Call libfun.so donen");
        return 0;
}


首先编译生成动态的库:
[root][~]# gcc -fPIC -O2 -c fun.c
[root][~]# gcc -shared -o libfun.so fun.o

然后编译测试代码:
[root][~]# gcc -O2 -c testfun.c
[root][~]# gcc -o testfun testfun.o -L=./ -lfun

下面第一次运行测试程序:
[root][~]# ./testfun
./testfun: error while loading shared libraries: libfun.so: cannot open shared object file: No such file or directory

这个是后会提示错误,原因是找不到libfun.so这个库。因为系统的加载器在加载库的时候,只到特定的目录下去

搜索库,相关的内容,可以man ldconfig。我们的库在我们当前的目录下,并不在系统lib目录下,所以搜索不

到。解决的方法有两种:

1、把我们的目录添加到库PATH里面去

2、把我们的库直接cp到系统PATH里面去

我采用第二种方法:
[root][~]# cp libfun.so /lib/

然后再运行一下测试程序:
[root][~]# ./testfun
Call libfun.so
In libfun.so
Call libfun.so done

|
你的动态库不是 libmy.so  吗? 貌似应该:

gcc -o dy dy.c -lmy 

|
# makefile-lib : 纵横软件制作中心雨亦奇编写, 2001-06-28.

all : my.so

SRC = getdate.c gettime.c

TGT = $(SRC:.c=.o)

$(SRC) : datetime.h
    @touch $@

%.o : %.c
    cc -c $?

# 动态函数库(my.so)生成
my.so : $(TGT)
    cc -shared -o $@ $(TGT)


Makefile 的错误应该是往网页上粘贴的时候, TAB 符号被修改了

需要执行命令的前面必须是一个 TAB 符号

lz 的编译错误应该是没有包含对应的头文件

|


学习了,晚上自己测试一下,最近正准备使用动态链接库呢
以前我用的都是编译成动态链接库.so,但是应用程序编译后,使用的静态编译,直接联编.so库文件的
不知道现在大家说的这种方式是有啥区别,测试下先

另外,我感觉,如果真的是使用.so的动态链接库模式,理论上应该是
dlopen、然后dlsym定位找到对应的函数位置,然后调用的方式
晚上测试一下fetag 兄的那种方式,好像那样的话,单独更新了.so后,尤其是.so变化很大的情况下,不知是否还需要重新联编可执行程序的?

    
 
 

您可能感兴趣的文章:

  • 求救啊 高分求救 UNIX下关于进程通讯的问题~
  • 求救!!!硬件高请进、、、、、、(十万火急,高分求救。)
  • Linux下无法启动apache 高分求救!在线等待
  • Solaris操作系统在启动的时候出错,急急救命呀 高分求救~~~
  • 高分求救!!!(200)我回多问相同问题来给分的,急急急
  • 高分求救!一个随机数产生的问题
  • 高分求救:有关内嵌汇编!!急!!!
  • 高分求救!jar文件直接双击运行的问题!
  • 大虾们谁有linux desktop 3.0(红旗)的序列号呀,高分求救!500
  • 高分求救:关于gnome/gtk+的问题
  • 高分在线求救!!!
  • 高分求救,关于jbuilder编程
  • 高分求救:简单问题
  • 为做需拟主机,单机架设DNS高分求救
  • 求救,帮忙,谢谢,高分相送!
  • linux 高分求救
  • 高分求救:我的solaris8如何进行网络配置?解决立即送分!
  • 高分求救:Linux下如何改变Ramdisk大小!急!!在线等待!!!
  • 高分求救!!基于http协议的代理图片显示不了
  • 高分求救,请教各位大侠!!!
  • 高分请教个链接错误!!!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 高分求助高分求助高分求助高分求助高分求助高分求助
  • 谁参加过weblogic的证书考试,是否有经验可供参考?高分高分高高分
  • 哪里有JB6下载啊,高分相送,救命
  • 高分求救!我在uclinux上运行应用程序时出现内存分配错误,不知如何解决,解决者高分!!
  • 哪里去找中文的EJB文章?高分悬赏!
  • 有jsp的upload和download 代码么,高分相报!
  • (高分求助)请问,那里有软件开发的<设计文档>
  • 高分寻求jsp代码(网上调查系统,新闻发布系统)就这点分了
  • 高分求购做饼图、线形图的源吗?
  • 关于linu下的中文输入.(高分:300)
  • 一个简单的问题,高分求助!!!
  • 高分求购jbulider6得注册码,企业版本,个人版本都要
  • Linux远程访问的问题,高分求教:)
  • 请问哪儿有Solaris8的光盘映像文件下载???高分相赠!!!
  • 高分求“Ration Rose”&"JBuilder6.0"&"VisualCafe"
  • VJ的一个问题,高分求助,熟悉VJ得请进!
  • 高分求购:linux和unix命令大全电子文档
  • 急救:关于BLOB数据类型---在线等待,高分相送!
  • 求UNIXWARE7.11的原版下载,高分相赠,在线等待!!!
  • 关于java?高分相送!


  • 站内导航:


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

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

    浙ICP备11055608号-3