linux停创建静态库出错

linux下创建静态库出错
我按照《linux程序设计》的实验操作实现静态库的建立:
准备好测试代码lib.h、bill.c和program.c;
 
#include <stdio.h> 
void bill(char* arg){ 
        printf("bill:we passed %s\n",arg); 

以上为bill.c的代码。

#ifndef _LIB_H 
#define _LIB_H 
void bill(char*); 
void fred(int);  
#endif 
以上为lib.h的代码。
[cpp] view plaincopyprint?
#include <stdlib.h> 
#include "lib.h" 
 
 
int main(){     //这里的main肯定没拼错
        bill("hello,world"); 
        exit(0); 

 
以上为program.c的代码。
编译多个源文件
 
在系统提示符下键入以下命令得到bill.o文件。
# gcc -c bill.c
同理编译program
#gcc –c program.c
 
将两个文件链接成一个.o文件。
#gcc –o program bill.o program.o

执行到这一步的时候出现program.o: In function `main':
program.c:(.text+0x11): undefined reference to `bill'
collect2: error: ld returned 1 exit status

linux

------解决方案--------------------
库是一个独立的模块而已!提供别人使用而已!
不要加进入main函数!

生成.a静态库库不是 ar命令么?
------解决方案--------------------
bill.c里面少了#include"bill.h"吧
再说你这也不是生成静态库,没有ar打包文件啊

------解决方案--------------------
楼上正解,需要用ar将bill.o创建为bill.a,然后再用gcc时链接bill.a就可以了
------解决方案--------------------
ar -r bill.a bill.o
gcc program.o billa
------解决方案--------------------
先用gcc -c把所有文件都编译成.o文件
再把所有.o文件使用ar r libxxxx.a *.o 生成你想要静态库
------解决方案--------------------
引用:
Quote: 引用:

不需要,也不可以把main函数所在的源文件生成.o文件,然后再链到静态库里的。没这样做的,你的库里都有main函数了,别人如何去用呢,这样一来就是在一个程序里有两个main函数了吗?