éæåºåå¨æåºçåºå«
1.éæåº
ä¹æ以称ä¹ä¸º"éæåº"ï¼æ¯å 为å¨é¾æ¥é¶æ®µï¼ä¼å°æ±ç¼çæçç®æ æ件.oä¸å¼ç¨å°çåºä¸èµ·é¾æ¥æå
å°å¯æ§è¡æ件ä¸ãå æ¤å¯¹åºçé¾æ¥æ¹å¼ç§°ä¸ºéæé¾æ¥ã
ä»æ¬è´¨ä¸æ¥è¯´ï¼ä¸ä¸ªéæåºå¯ä»¥ç®åçææ¯ä¸ç»ç®æ æ件(.o/.objæ件)çéåï¼éæåºä¸æ±ç¼çæçç®æ æ件(.o/.obj)ä¸èµ·é¾æ¥ä¸ºå¯æ§è¡æ件ã
éæåºï¼åç¼ä¸º.a/.libï¼å.oæä»¶æ ¼å¼ç¸ä¼¼ãå³å¾å¤ç®æ æ件ç»è¿å缩æå
åå½¢æçä¸ä¸ªæ件
éæåºç¹ç¹æ»ç»ï¼
1. éæåºå¯¹å½æ°åºçé¾æ¥æ¯æ¾å¨ç¼è¯æ¶æå®æç
2. ç¨åºå¨è¿è¡æ¶ä¸å½æ°åºåæ çèï¼ç§»æ¤æ¹ä¾¿ï¼å 为代ç å·²ç»åµå
¥å°ç¨åºéé¢äºï¼å¯ä»¥ç´æ¥è·çç¨åºèµ°ï¼ä¸åå¨å¯¹å¤é¨æ件çä¾èµ
3. 浪费空é´åèµæºï¼å 为ææç¸å
³çç®æ æ件ä¸çµæ¶å°çå½æ°åºè¢«é¾æ¥åæä¸ä¸ªå¯æ§è¡æ件ï¼ä¼å¢å åæ¬ç¨åºç空é´
GCCç¼è¯ã使ç¨éæåº
éæåºçåç¼æ¯.a(并没æ强å¶è§å®)ï¼å®ç产çå两æ¥
1. ç±æºæ件ç¼è¯çæä¸å .oï¼æ¯ä¸ª.oéé½å
å«è¿ä¸ªç¼è¯åå
ç符å·è¡¨
2. arå½ä»¤å°å¾å¤.o转æ¢æ.aï¼æ为éæåºï¼ä»è¿ç¹ä¹å¯ä»¥çåºæ¥ï¼åºæ¯å¾å¤.oæ件çéå
ç¼è¯å¥½éæåºæ件ä¹åï¼æ们就å¯ä»¥å¨å
¶ä»ç¨åºä¸ä½¿ç¨éæåºæ件ä¸çå½æ°äº
1. åªéè¦å¨ä½¿ç¨å°è¿äºå
¬ç¨å½æ°çæºç¨åºä¸å
å«è¿äºå
¬ç¨å½æ°çåå声æ(include对åºç头æ件)
2. ç¶åå¨ç¨gccå½ä»¤çæç®æ æ件æ¶ææéæåºå
3. gccå°ä¼ä»éæåºä¸å°å
¬ç¨å½æ°è¿æ¥å°ç®æ æ件ä¸
4. 注æï¼gccä¼å¨éæåºååå ä¸åç¼libï¼ç¶å追å æ©å±å.aå¾å°çéæåºæ件åæ¥æ¥æ¾éæåºæ件,å æ¤ï¼æ们å¨åéè¦è¿æ¥çåºæ¶ï¼åªåååå°±å¯ä»¥ï¼å¦libhello.açåºï¼åªå: -lhello
2.å¨æåº
å¨æåºæ件åå½åè§èåéæåºæ件åå½åè§è类似ï¼ä¹æ¯å¨å¨æåºåå¢å åç¼libï¼ä½å
¶æ件æ©å±å为.soï¼.dllï¼ãä¾å¦ï¼æ们å°å建çå¨æåºå为myhelloï¼åå¨æåºæ件åå°±æ¯libmyhello.soã
使ç¨åºæ¯éç¨ä»£ç çä¸ç§ç»ä½³æ¹å¼ã æ¨ä¸å¿
å¨èªå·±å建çæ¯ä¸ªç¨åºä¸éæ°å®ç°åä¸ä¾ç¨ï¼èåªé对è¿äºä¾ç¨åå
¥ä¸æ¬¡ï¼ç¶åä»éè¦è¯¥åè½çåºç¨ç¨åºå¼ç¨å®ä»¬å³å¯ã éè¿å°ä»£ç æ¾å
¥ DLLï¼æ¨èçå¨å¼ç¨å®çæ¯ä¸ªåºç¨ç¨åºç空é´ï¼èä¸ï¼æ¨å¯ä»¥æ´æ° DLLï¼èæ ééæ°ç¼è¯ææåºç¨ç¨åºã
å¨æé¾æ¥åº (DLL) æ¯ä½ä¸ºå
±äº«å½æ°åºçå¯æ§è¡æ件ãå¨æé¾æ¥æä¾äºä¸ç§æ¹æ³ï¼ä½¿è¿ç¨å¯ä»¥è°ç¨ä¸å±äºå
¶å¯æ§è¡ä»£ç çå½æ°ãDLL è¿æå©äºå
±äº«æ°æ®åèµæºãå¤ä¸ªåºç¨ç¨åºå¯åæ¶è®¿é®å
åä¸å个 DLL å¯æ¬çå
容ã
å¨æé¾æ¥ä¸éæé¾æ¥çä¸åä¹å¤å¨äºå®å
许å¯æ§è¡æ¨¡åï¼.dll æ件æ .exe æ件ï¼ä»
å
å«å¨è¿è¡æ¶å®ä½ DLL å½æ°çå¯æ§è¡ä»£ç æéçä¿¡æ¯ãå¨éæé¾æ¥ä¸ï¼é¾æ¥å¨ä»éæé¾æ¥åºè·åææ被å¼ç¨çå½æ°ï¼å¹¶å°åºå代ç ä¸èµ·æ¾å°å¯æ§è¡æ件ä¸ã
使ç¨å¨æé¾æ¥ä»£æ¿éæé¾æ¥æè¥å¹²ä¼ç¹ãDLL èçå
åï¼åå°äº¤æ¢æä½ï¼èçç£ç空é´ï¼æ´æäºå级ï¼æä¾å®åæ¯æï¼æä¾æ©å± MFC åºç±»çæºå¶ï¼æ¯æå¤è¯è¨ç¨åºï¼å¹¶ä½¿å½é
çæ¬çå建轻æ¾å®æã
DLL çç±»å
å½æ¨å¨åºç¨ç¨åºä¸å è½½ DLL æ¶ï¼å¯ä»¥ä½¿ç¨ä¸¤ç§é¾æ¥æ¹æ³æ¥è°ç¨å¯¼åºç DLL å½æ°ãè¿ä¸¤ç§é¾æ¥æ¹æ³æ¯å è½½æ¶å¨æé¾æ¥åè¿è¡æ¶å¨æé¾æ¥ã
å¨æåºä¸è¬ä¼æ对åºç导å
¥åºï¼æ¹ä¾¿ç¨åºéæè½½å
¥å¨æé¾æ¥åºï¼å¦åä½ å¯è½å°±éè¦èªå·±LoadLibaryè°å
¥DLLæ件ï¼ç¶ååæå·¥GetProcAddressè·å¾å¯¹åºå½æ°äºãæäºå¯¼å
¥åºï¼ä½ åªéè¦é¾æ¥å¯¼å
¥åºåæç
§å¤´æ件å½æ°æ¥å£ç声æè°ç¨å½æ°å°±å¯ä»¥äºã
å è½½æ¶å¨æé¾æ¥ï¼load-time dynamic linkingï¼
å¨å è½½æ¶å¨æé¾æ¥ä¸ï¼åºç¨ç¨åºåè°ç¨æ¬å°å½æ°ä¸æ ·å¯¹å¯¼åºç DLL å½æ°è¿è¡æ¾å¼è°ç¨ãè¦ä½¿ç¨å è½½æ¶å¨æé¾æ¥ï¼è¯·å¨ç¼è¯åé¾æ¥åºç¨ç¨åºæ¶æä¾å¤´æ件 (.h) å导å
¥åºæ件 (.lib)ãå½æ¨è¿æ ·åæ¶ï¼é¾æ¥å¨å°åç³»ç»æä¾å è½½ DLL æéçä¿¡æ¯ï¼å¹¶å¨å è½½æ¶è§£æ导åºç DLL å½æ°çä½ç½®ã
è¿è¡æ¶å¨æé¾æ¥ï¼run-time dynamic linkingï¼
å¨è¿è¡æ¶å¨æé¾æ¥ä¸ï¼åºç¨ç¨åºè°ç¨ LoadLibrary å½æ°æ LoadLibraryEx å½æ°ä»¥å¨è¿è¡æ¶å è½½ DLLãæåå è½½ DLL åï¼å¯ä»¥ä½¿ç¨ GetProcAddress å½æ°è·å¾è¦è°ç¨ç导åºç DLL å½æ°çå°åãå¨ä½¿ç¨è¿è¡æ¶å¨æé¾æ¥æ¶ï¼æ é使ç¨å¯¼å
¥åºæ件ã
温馨提示:答案为网友推荐,仅供参考