|
写了一个程序
/*mylib.h*/
extern double mylog(double);
/*mylib.c*/
#include "mylib.h"
#include <math.h>
double mylog(double f)
{
return log(f);
}
/*cal.c*/
#include <stdio.h>
#include "mylib.h"
int main(int argc,char** argv)
{
double f = 10.2;
printf("%f",mylog(f));
}
这样编译:
gcc -c mylib.c
gcc -c cal.c
ar cr libmy.a mylib.o
ar cr libcal.a cal.o
gcc -o cal libmy.a libcal.a
结果报错:
libcal.a(cal.o.b)(.text+0x34):cal.c: undefined reference to `mylog'
collect2: ld returned 1 exit status
但是最后一行这样写
gcc -o cal libcal.a libmy.a
又可以编译成功,
如果使用.o文件,则可以不计前后位置,如gcc -o cal cal.o mylib.o和gcc -o cal mylib.o cal.o
都可以。
想请教高手这是什么原因。 |
|