ãæ们é常æä¸äºå
¬ç¨å½æ°å¶ä½æå½æ°åºï¼ä¾å
¶å®ç¨åºä½¿ç¨ã
ããå½æ°åºå为éæåºåå¨æåºä¸¤ç§ã
ããéæåºå¨ç¨åºç¼è¯æ¶ä¼è¢«è¿æ¥å°ç®æ 代ç ä¸ï¼ç¨åºè¿è¡æ¶å°ä¸åéè¦è¯¥éæåºã
ããå¨æåºå¨ç¨åºç¼è¯æ¶å¹¶ä¸ä¼è¢«è¿æ¥å°ç®æ 代ç ä¸ï¼èæ¯å¨ç¨åºè¿è¡æ¯æ被载å
¥ï¼å æ¤å¨ç¨åºè¿è¡æ¶è¿éè¦å¨æåºåå¨ã
ããæ¬æ主è¦éè¿ä¸¾ä¾æ¥è¯´æå¨Linuxä¸å¦ä½å建éæåºåå¨æåºï¼ä»¥å使ç¨å®ä»¬ã
ããå¨å建å½æ°åºåï¼æ们å
æ¥åå¤ä¸¾ä¾ç¨çæºç¨åºï¼å¹¶å°å½æ°åºçæºç¨åºç¼è¯æ.oæ件ã
ãã第1æ¥ï¼ç¼è¾å¾å°ä¸¾ä¾çç¨åº--hello.hãhello.cåmain.c;
ããhello.h(è§ç¨åº1)为该å½æ°åºç头æ件ã
ããhello.c(è§ç¨åº2)æ¯å½æ°åºçæºç¨åºï¼å
¶ä¸å
å«å
¬ç¨å½æ°helloï¼è¯¥å½æ°å°å¨å±å¹ä¸è¾åº"Hello XXX!"ã
ããmain.c(è§ç¨åº3)为æµè¯åºæ件ç主ç¨åºï¼å¨ä¸»ç¨åºä¸è°ç¨äºå
¬ç¨å½æ°helloã
ããç¨åº1: hello.h
ãã#ifndef HELLO_H
ãã#define HELLO_H
ããvoid hello(const char *name);
ãã#endif //HELLO_H
ããç¨åº2: hello.c
ãã#include
ããvoid hello(const char *name)
ãã{
ããprintf("Hello %s!/n", name);
ãã}
ããç¨åº3: main.c
ãã#include "hello.h"
ããint main()
ãã{
ããhello("everyone");
ããreturn 0;
ãã}
ãã第2æ¥ï¼å°hello.cç¼è¯æ.oæ件;
ããæ 论éæåºï¼è¿æ¯å¨æåºï¼é½æ¯ç±.oæ件å建çãå æ¤ï¼æ们å¿
é¡»å°æºç¨åºhello.céè¿gccå
ç¼è¯æ.oæ件ã
ããå¨ç³»ç»æ示符ä¸é®å
¥ä»¥ä¸å½ä»¤å¾å°hello.oæ件ã
ãã# gcc -c hello.c
ãã#
ãã(注1ï¼æ¬æä¸ä»ç»åå½ä»¤ä½¿ç¨åå
¶åæ°åè½ï¼è¥å¸æ详ç»äºè§£å®ä»¬ï¼è¯·åèå
¶ä»ææ¡£ã)
ãã(注2ï¼é¦å符"#"æ¯ç³»ç»æ示符ï¼ä¸éè¦é®å
¥ï¼ä¸æç¸åã)
ããæ们è¿è¡lså½ä»¤ççæ¯å¦çåäºhello.oæ件ã
ãã# ls
ããhello.c hello.h hello.o main.c
ãã#
ãã(注3ï¼é¦å符ä¸æ¯"#"为系ç»è¿è¡ç»æï¼ä¸æç¸åã)
ããå¨lså½ä»¤ç»æä¸ï¼æ们çå°äºhello.oæ件ï¼æ¬æ¥æä½å®æã
ããä¸é¢æ们å
æ¥ççå¦ä½å建éæåºï¼ä»¥å使ç¨å®ã
ãã第3æ¥ï¼ç±.oæ件å建éæåº;
ããéæåºæ件åçå½åè§èæ¯ä»¥lib为åç¼ï¼ç´§æ¥çè·éæåºåï¼æ©å±å为.aãä¾å¦ï¼æ们å°å建çéæåºå为myhelloï¼åéæåºæ件åå°±æ¯libmyhello.aãå¨å建å使ç¨éæåºæ¶ï¼éè¦æ³¨æè¿ç¹ãå建éæåºç¨arå½ä»¤ã
ããå¨ç³»ç»æ示符ä¸é®å
¥ä»¥ä¸å½ä»¤å°å建éæåºæ件libmyhello.aã
ãã# ar cr libmyhello.a hello.o
ãã#
ããæ们åæ ·è¿è¡lså½ä»¤æ¥çç»æï¼
ãã# ls
ããhello.c hello.h hello.o libmyhello.a main.c
ãã#
ããlså½ä»¤ç»æä¸ælibmyhello.aã
ãã第4æ¥ï¼å¨ç¨åºä¸ä½¿ç¨éæåº;
ããéæåºå¶ä½å®äºï¼å¦ä½ä½¿ç¨å®å
é¨çå½æ°å¢ï¼åªéè¦å¨ä½¿ç¨å°è¿äºå
¬ç¨å½æ°çæºç¨åºä¸å
å«è¿äºå
¬ç¨å½æ°çåå声æï¼ç¶åå¨ç¨gccå½ä»¤çæç®æ æ件æ¶ææéæåºåï¼gccå°ä¼ä»éæåºä¸å°å
¬ç¨å½æ°è¿æ¥å°ç®æ æ件ä¸ã注æï¼gccä¼å¨éæåºååå ä¸åç¼libï¼ç¶å追å æ©å±å.aå¾å°çéæåºæ件åæ¥æ¥æ¾éæåºæ件ã
ããå¨ç¨åº3:main.cä¸ï¼æ们å
å«äºéæåºç头æ件hello.hï¼ç¶åå¨ä¸»ç¨åºmainä¸ç´æ¥è°ç¨å
¬ç¨å½æ°helloãä¸é¢å
çæç®æ ç¨åºhelloï¼ç¶åè¿è¡helloç¨åºççç»æå¦ä½ã
ãã# gcc -o hello main.c -L. -lmyhello
ãã# ./hello
ããHello everyone!
ãã#
ããæ们å é¤éæåºæ件è¯è¯å
¬ç¨å½æ°helloæ¯å¦ççè¿æ¥å°ç®æ æ件 helloä¸äºã
ãã# rm libmyhello.a
ããrm: remove regular file `libmyhello.a'? y
ãã# ./hello
ããHello everyone!
ãã#
ããç¨åºç
§å¸¸è¿è¡ï¼éæåºä¸çå
¬ç¨å½æ°å·²ç»è¿æ¥å°ç®æ æ件ä¸äºã
ããæ们继ç»ççå¦ä½å¨Linuxä¸å建å¨æåºãæ们è¿æ¯ä».oæ件å¼å§ã
ãã第5æ¥ï¼ç±.oæ件å建å¨æåºæ件;
ããå¨æåºæ件åå½åè§èåéæåºæ件åå½åè§è类似ï¼ä¹æ¯å¨å¨æåºåå¢å åç¼libï¼ä½å
¶æ件æ©å±å为.soãä¾å¦ï¼æ们å°å建çå¨æåºå为myhelloï¼åå¨æåºæ件åå°±æ¯libmyhello.soãç¨gccæ¥å建å¨æåºã
ããå¨ç³»ç»æ示符ä¸é®å
¥ä»¥ä¸å½ä»¤å¾å°å¨æåºæ件libmyhello.soã
ãã# gcc -shared -fPCI -o libmyhello.so hello.o
ãã#
ããæ们ç
§æ ·ä½¿ç¨lså½ä»¤ççå¨æåºæ件æ¯å¦çæã
ãã# ls
ããhello.c hello.h hello.o libmyhello.so main.c
ãã#
ãã第6æ¥ï¼å¨ç¨åºä¸ä½¿ç¨å¨æåº;
ããå¨ç¨åºä¸ä½¿ç¨å¨æåºå使ç¨éæåºå®å
¨ä¸æ ·ï¼ä¹æ¯å¨ä½¿ç¨å°è¿äºå
¬ç¨å½æ°çæºç¨åºä¸å
å«è¿äºå
¬ç¨å½æ°çåå声æï¼ç¶åå¨ç¨gccå½ä»¤çæç®æ æ件æ¶ææå¨æåºåè¿è¡ç¼è¯ãæ们å
è¿è¡gccå½ä»¤çæç®æ æ件ï¼åè¿è¡å®ççç»æã
ãã# gcc -o hello main.c -L. -lmyhello
ãã# ./hello
ãã./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory
ãã#
ããå¦!åºéäºãå¿«ççé误æ示ï¼åæ¥æ¯æ¾ä¸å°å¨æåºæ件libmyhello.soãç¨åºå¨è¿è¡æ¶ï¼ä¼å¨/usr/libå/libçç®å½ä¸æ¥æ¾éè¦çå¨æåºæ件ãè¥æ¾å°ï¼åè½½å
¥å¨æåºï¼å¦åå°æ示类似ä¸è¿°é误èç»æ¢ç¨åºè¿è¡ãæ们å°æ件 libmyhello.soå¤å¶å°ç®å½/usr/libä¸ï¼åè¯è¯ã
ãã# mv libmyhello.so /usr/lib
ãã# ./hello
ããHello everyone!
ãã#
ããæåäºãè¿ä¹è¿ä¸æ¥è¯´æäºå¨æåºå¨ç¨åºè¿è¡æ¶æ¯éè¦çã
ããæ们åè¿å¤´ççï¼åç°ä½¿ç¨éæåºå使ç¨å¨æåºç¼è¯æç®æ ç¨åºä½¿ç¨çgccå½ä»¤å®å
¨ä¸æ ·ï¼é£å½éæåºåå¨æåºååæ¶ï¼gccå½ä»¤ä¼ä½¿ç¨åªä¸ªåºæ件å¢ï¼æ±ç对é®é¢å¿
究å°åºçå¿æ
ï¼æ¥è¯è¯çã
ããå
å é¤ é¤.cå.hå¤ç æææ件ï¼æ¢å¤ææ们ååç¼è¾å®ä¸¾ä¾ç¨åºç¶æã
ãã# rm -f hello hello.o /usr/lib/libmyhello.so
ãã# ls
ããhello.c hello.h main.c
ãã#
ããå¨æ¥å建éæåºæ件libmyhello.aåå¨æåºæ件libmyhello.soã
ãã# gcc -c hello.c
ãã# ar cr libmyhello.a hello.o
ãã# gcc -shared -fPCI -o libmyhello.so hello.o
ãã# ls
ããhello.c hello.h hello.o libmyhello.a libmyhello.so main.c
ãã#
ããéè¿ä¸è¿°æåä¸æ¡lså½ä»¤ï¼å¯ä»¥åç°éæåºæ件libmyhello.aåå¨æåºæ件libmyhello.soé½å·²ç»çæï¼å¹¶é½å¨å½åç®å½ä¸ãç¶åï¼æ们è¿è¡gccå½ä»¤æ¥ä½¿ç¨å½æ°åºmyhelloçæç®æ æ件helloï¼å¹¶è¿è¡ç¨åº helloã
ãã# gcc -o hello main.c -L. -lmyhello
ãã# ./hello
ãã./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory
ãã#
ããä»ç¨åºhelloè¿è¡çç»æä¸å¾å®¹æç¥éï¼å½éæåºåå¨æåºååæ¶ï¼ gccå½ä»¤å°ä¼å
使ç¨å¨æåºã
温馨提示:答案为网友推荐,仅供参考