2016-12-27 97 views
0

我的文件依赖a.ca.hb.cb.hc.cc.h,都是这样的:创建目标文件中的文件

// a.c 
#include "a.h" 
#include "b.h" 
#include "c.h" 
#include <lib> 

// b.c 
#include "b.h" 
#include <lib> 

// c.c 
#include "c.h" 
#include <lib> 

我没有main()功能。我需要创建out.o,而其他人会在他的程序中使用它(他将不得不编写#include "a.h"以使用我在那里编写的函数)。

所以我写了

gcc -std=c99 -c c.c -o c.o -llib

gcc -std=c99 -c b.c -o b.o -llib

gcc -std=c99 -c a.c -o a.o -llib

但是当我尝试使用将它们结合起来

gcc -o out.o a.o b.o c.o -llib

我得到很多错误,如relocation 18 has invalid symbol index 13,最后undefined reference to 'main'

如何创建我所需要的? `

+0

术语你正在寻找的是*静态库*。搜索如何在例如Linux,你会得到很多点击。 –

回答

2

我想你想从你的.o文件中创建一个库。

AR CRF yourlib.a鳌博合作

然后,其他人都可以做自己的编译程序,例如:

的gcc -o主要的main.c yourlib.a

+0

以及如何在这个静态库中包含'lib'?使用'arfc yourlib.a a.o b.o c.o -llib'没有工作 –

+0

@ManoMini静态库只是对象文件的集合(或档案,这是'.a'后缀所代表的)。你不能*链接*一个静态库,来创建一个包含它自己的*和*它的所有依赖关系。这不是静态库的工作原理。如果静态库依赖于另一个库,则库的用户也必须链接到您的依赖项。你根本无法创建一个独立的静态库。 –

+0

如果你称之为“lib”是一个静态库,那么是的,你可以从你的lib.a中提取元素(.o文件):ar -x lib.a ...然后你将拥有所有的这些.o在你的目录中。然后你可以做同样的事情,现在包括从lib.a中用ar -x提取的.o文件列表。如果它们太多,可以使用* .o。 – zsram