它應該工作。順便說一句,你的tst.c
缺少#include <stdio.h>
。其main
應返回ìnt
並以例如return 0;
。
隨着
/* file tst.c */
#include <stdio.h>
int tstVar = 5;
extern void funInso(void);
int main(){
funInso();
printf("tstVar %d\n", tstVar);
return 0;
}
和
/* file tstlib.c */
extern int tstVar;
void funInso(){
tstVar = 50;
}
我gcc -Wall -c tst.c
編制的第一個文件,我gcc -Wall -c tstlib.c
第二個文件編制。我
ar r libtst.a tstlib.o
ranlib libtst.a
使其成爲庫,然後我聯繫的第一個文件到庫gcc -Wall tst.o -L. -ltst -o tst
通常的做法是讓你的庫中的頭文件tstlib.h
其中將包括如
#ifndef TSTLIB_H_
#define TSTLIB_H_
/* a useful explanation about tstVar. */
extern int tstVar;
/* the role of funInso. */
extern void funInso(void);
#endif /*TSTLIB_H */
,並同時擁有tst.c
和tstlib.c
包含#include "tstlib.h"
如果磁帶庫共享,你應該
編譯位置無關的代碼模式庫文件
gcc -Wall -fpic -c tstlib.c -o tstlib.pic.o
鏈接與-shared
gcc -shared tstlib.pic.o -o libtst.so
請注意,您可以鏈接共享對象與其他庫。如果您的tstlib.c
是例如您可能已附加-lgdbm
該命令致電gdbm_open
因此包括<gdbm.h>
。這是共享庫爲靜態庫所不具備的許多功能之一。
鏈接的可執行文件-rdynamic
gcc -rdynamic tst.o -L. -ltst -o tst
請花時間閱讀可以在lib目錄中定義的Program Library Howto
你怎麼嘗試'extern'關鍵字?有用。向我們展示代碼。 – 2012-01-30 07:39:10
@TioPepe我剛剛添加了示例代碼:) – Thangaraj 2012-01-30 07:46:12
你有什麼問題?如果有的話,你會得到什麼錯誤消息?你如何建立圖書館?你如何構建可執行文件? – 2012-01-30 07:49:47