LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 839|回复: 5

[共享库问题] 如何让自己生成的共享库或静态库使用自己生成的共享库?

[复制链接]
发表于 2005-11-15 17:44:53 | 显示全部楼层 |阅读模式
我编译了一个共享库, 程序能正常使用该库.
又编写了一个共享库, 它使用先前生成的共享库中的函数. 编译通过了, 但连接程序时却出错了,
错误信息如下:
undefined reference to `err_sys'      其中err_sys是第一个库中的函数
静态库或.o文件在与程序连接时也出现这个问题.
请问各位高手, 如何解决.
多谢!
 楼主| 发表于 2005-11-15 21:26:56 | 显示全部楼层
没人知道吗?
我自己先顶一下.
回复 支持 反对

使用道具 举报

发表于 2005-11-15 23:23:04 | 显示全部楼层
要包含头文件!版主可能忙着找工作吧!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-16 13:20:56 | 显示全部楼层
Post by haohao_h
要包含头文件!版主可能忙着找工作吧!

第二个库和主程序中都包含了第一个库的头文件.
回复 支持 反对

使用道具 举报

发表于 2005-11-16 22:48:56 | 显示全部楼层
我试了一下,没问题的!
  1. #include <stdio.h>
  2. int printdemo(void)
  3. {
  4.         printf("it's a test!\n");
  5.         return 0;
  6. }
复制代码
a.c
  1. #ifndef _A_H_
  2. #define _A_H_

  3. int printdemo(void);
  4. #endif
复制代码
a.h
gcc -fPIC -shared a.c -o liba.so
  1. #include "a.h"

  2. int useliba(void)
  3. {
  4.         printdemo();
  5.         return 0;
  6. }
复制代码
b.c
  1. #ifndef _B_H_
  2. #define _B_H_

  3. int useliba(void);
  4. #endif
复制代码
b.h
gcc -la -fPIC -shared b.c -o libb.so
  1. #include "b.h"

  2. int main(void)
  3. {
  4.         useliba();
  5.         return 0;
  6. }
复制代码
c.c
gcc -la -lb c.c -o test
  1. hedes@debian:~/test$ ./test
  2. it's a test!
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-11-17 00:39:14 | 显示全部楼层
gcc -L/path
/path是第一个库的路径
执行时LD_LIBRARY_PATH=/path ./test
或者把/path加入/etc/ld.so.conf
然后执行ldconfig
再执行程序
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表