首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux下gcc如何编译动态库以及如何像自带库一样使用自制的库

2013-06-26 
linux下gcc怎么编译动态库以及怎么像自带库一样使用自制的库我使用的是ubuntu系统,以下是我的信息:Linux l

linux下gcc怎么编译动态库以及怎么像自带库一样使用自制的库
我使用的是ubuntu系统,以下是我的信息:
Linux localhost 3.2.0-39-generic-pae #62-Ubuntu SMP Wed Feb 27 22:25:11 UTC 2013 i686 i686 i386 GNU/Linux
我想自己写了个函数,以后就想使用标准库中函数一样使用它(像使用read(),write()一样),
我自己试验了一个,写了一个add函数


文件add.c:
int add(int a, int b)
{
  return a + b;
}



然后对add.c文件进行编译
gcc -fPIC -shared -o libadd.so add.c

测试程序test.c
#inclucde <stdio.h>
int main()
{
  int a = add(1, 2);
  return 0;
}


然后编译 
gcc -o test test.c -L. -ladd

运行./tesst 通过

如果我直接编译 gcc test.c ,出错 
/tmp/ccdwGdzl.o: In function `main':
test.c:(.text+0x19): undefined reference to `add'
collect2: ld returned 1 exit status

我想问的是:
1.要怎么才能在以后的函数中直接调用add(a, b),编译时直接 gcc test.c,而不用指定什么链接的。
2.还有与add对应的头文件怎么写 gcc linux C
[解决办法]
需要一个add.h

add函数在add.h当中声明。
int add(int a, int b);

test.c当中
#include "add.h"

编译test的命令不变。
[解决办法]
我感觉还得将编译好的库文件放到系统库文件的目录下吧,没亲自试.
[解决办法]
声明一下外部函数
extern int add(int a, int b);
[解决办法]
我感觉你怎么弄,也不能满足你的要求,包括把你的库放到/usr/lib下面。
在vc里面可以做到。

热点排行