2016-12-27 61 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