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

还是关于linux共享库版本化的问题,有重谢

    来源: 互联网  发布时间:2017-03-05

    本文导语:  自己找的一个例子代码如下: foo.c void foo_v1(int f) {      printf("foo_v1n"); } __asm__(".symver foo_v1,foo@@VERSION_1.0"); main.c #include  void foo(int); int main(void) {     foo(100);     return 0; } 1.ver VERSION_1.0{       global:   ...

自己找的一个例子代码如下:
foo.c

void foo_v1(int f) {
     printf("foo_v1n");
}
__asm__(".symver foo_v1,foo@@VERSION_1.0");

main.c
#include 

void foo(int);

int main(void) {
    foo(100);
    return 0;
}

1.ver
VERSION_1.0{
      global:
      foo;
};


Makefile
all: v1 

libfoo.so.1.0 : foo.c
gcc -shared -fPIC -o libfoo.so.1.0 -Wl,--soname='libfoo.so' -Wl,--version-script=1.ver foo.c

v1: main.c libfoo.so.1.0.0
ln -sf libfoo.so.1.0  libfoo.so
gcc -Wall -o v1 -lfoo -L. main.c
.PHONY:clean
clean:
rm -f libfoo* v1 

在编译时我有些不懂不过现在是正确的,我想按照下面说的进行修改
1.soname应该加大版本号为libfoo.so.1
2.ln软连接按照网上资料应该是ln -sf soname linkname(即ln -sf libfoo.so.1 libfoo.so)
如果按照上述修改,在编译连链接时报错为
/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status
make: *** [v1] Error 1

求大神指点一下怎么修改?小弟重谢!
 

|
libfoo.so.1.0 : foo.c
    gcc -shared -fPIC -o libfoo.so.1.0 -Wl,--soname='libfoo.so' -Wl,--version-script=1.ver foo.c

v1: main.c libfoo.so.1.0.0
    ln -sf libfoo.so.1.0  libfoo.so
    gcc -Wall -o v1 -lfoo -L. main.c

红色部分怎么解释?
另外ln -sf libfoo.so.1.0  libfoo.so这句换成自动生成的,因为你编译的时候指定名字了。
ldconfig -n .

你现在的linkname和soname是同一个名字,不过没关系。

|
(1)如果是第一次,把-lfoo去了吧!这句话是说要链接foo这个库,但foo不就是你现在正在编译的么!所以你在第一次链接时还没有foo,必须把他去了
(2)如果你已经有了libfoo.so.0,把他放在当前路径或usr/lib/下吧!不然会找不到

|
Makefile里加上LFLAGS += -L你的库的路径。

    
 
 

您可能感兴趣的文章:

  • 请问LINUX内核版本为2.4.31的是什么版本?自己写的串口驱动,是否向下兼容,还是必需版本相同?
  • libxml2是针对aix、sco、linux分不同版本还是统一版本?
  • 已安装automake 版本1.9 为什么还是提示版本过低
  • 现在使用的Solaris 10 版本,做DNS client设置时,找不到resolv.conf 文件? 是UNIX版本问题,还是本来就需要自己新建?
  • 还是没搞清楚内核版本号的意思
  • 谁在版本控制中用过 Subversion ? 还是继续用 cvs ?
  • 又买了一个版本的.net,又是装不上,烦也烦死了,还是java爽呀。散点分玩玩。
  • vmware大家一般用什么版本?要在网上下还是可以在商店买?
  • 请教!出现这个提示是什么原因..是模块版本问题,还是其他问题..http://220.114.102.28/xitong/ProductShow.asp?ArticleID=82
  • 用RED HAT做短信网关服务器用哪个版本比较好? 7.2? 7.3? 8.0? 还是9.0? 9.0稳定吗?
  • ubantu中国站上下的CD镜像包含中文版本还是没有中文版?
  • 这个命令下载的是mysql版本5.1, 还是5.6?
  • 读unix 经典著作 apue 中文版本,这里翻译是否有问题 ,还是我理解有误?
  • 哪一个国产Linux最好,是红旗还是蓝点,带不带Office?WPS有没有Linux版本?HP打印机有没有Linux驱动?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 进程数据同步:消息队列还是共享内存+信号
  • 求助:已经安装了共享库,还是提示“Unable to load library”
  • jsp程序运行一次后,再修改原jsp程序,为什么运行还是的还是原来的程序?? iis7站长之家
  • 初学请教:samba配置好后,为何windows还是无法看到linux的共享资源呢
  • 程序员为了健康必看!早晨空腹喝水,是对还是错?
  • jsp+bean还是jsp+ejb还是jsp+servlet还是asp+activex好?
  • 还是那个关于update的问题呀,还是解决不了呀?
  • http走的是tcp还是udp?ssh是tcp还是udp?
  • 请问ResultSet返回的是全部数据,还是指针,还是其他什么?
  • 怎样在服务器端判断客户使用的浏览器是使用的简体中文的还是英文的还是日文的或者其他的?
  • 大家以后的发展方向是什么?能交流一下么?是就想学好专业知识,打一辈子工?还是自己开公司?还是要考研究生,使自己提高一个档次?还是想办法出国深造?发言比有分!!!
  • 程序里如何判断光驱里的是DVD盘,还是CD盘,还是一般的CD数据盘
  • linux新手想请问大家你们在linux下通常用什么开发语言和工具(C多点还是C++多点还是pascal ?还有工具方面?)
  • 你的桌面用的是LINUX还是UNIX还是WINDOWS?
  • 请问EJB高手,EJB主要用在b/s方式还是c/s,还是两这都可?有用过jBoss的吗?有配置文档吗?一定给分!!
  • linux下的c/c++语言开发,最好的ide是gcc还是kylix还是其他
  • jsp程序运行一次后,再修改原jsp程序,为什么运行还是的还是原来的程序??
  • 信号可靠还是不可靠,取决与信号本身还是signal()/sigaction()的区别?
  • 学习JAVA用JSDK开发还是VJ++?有什么区别吗?还是一样?
  • 我以前是搞DELPHI的,现在想学JAVA,请教各位大侠你们用的都是什么开发环境是JBuild,还是VJ++,还是其他的(参与者都有分)
  • 求教:LIUNX 学开发还是学主机维护。。??
  • 新手问题,在linux下c/c++开发是在图形界面下还是字符界面下进行?
  • 速急!!!还是有关于汉入问题!!!大哥们速帮忙,小弟在线等待!!!
  • 请问各位现在用JAVA为开发工具的多,还是用C++的多?
  • REDHAT8.0还是REDHAT9.0?


  • 站内导航:


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

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

    浙ICP备11055608号-3