.soã.dylibã.aãã¡ã¤ã«ãå ±æã©ã¤ãã©ãªãªã©ã«ã¤ãã¦èª¿ã¹ã¦ã¿ã
MacPortsで[email protected]を入れようとしたら失敗した - kanonjiの日記ãMacPortsで入れる代わりに自前でビルドしたライブラリを使ってswftoolsをビルドしてみた - kanonjiの日記ã§ããã«ãããæã®ã©ã¤ãã©ãªã«ã¤ãã¦ã®ç¥èã足ããå°ã£ãã®ã§ãã¡ãã£ã¨èª¿ã¹ã¦ã¿ã¾ãããåºæ¬çã«Linuxã«ã¤ãã¦èª¿ã¹ã¦ã¦ãMacã«ã¤ãã¦ãåãã£ãã¨ãããããã£ã¦æãã§ãã
ã¡ããã¨ã¾ã¨ããã»ã©ç解åºæ¥ã¦ããããããªãã®ã§ãåãã£ãäºã並ã¹ãæãã§æ¸ãã¾ããåéããã¦ãããã¡ãã£ã¨ç¨èªãããããã£ããããããããã¾ããã
Linuxã¨Macã§ã¯ä»çµã¿ãéã
Linuxã§ã¯ELF(Executable and Linking Format)ã¨ããå®è¡ãã¡ã¤ã«ãã©ã¼ãããããã£ã¦ããã®è¾ºã調ã¹ã¦ããã¨ããELFã¨ããåèªãè¦ããã¾ãã
Macã¯ã¨ããã¨ãMach-Oã¨ããå®è¡ãã¡ã¤ã«ãã©ã¼ããããæ¡ç¨ããã¦ãã¾ãã
å¥ã«Unix(Mac)ã¨Linuxã§åããã¦ãããããããªããELFã¯BSDç³»ã®ä¸é¨ã¨ãSolarisã§ã使ããã¦ãããã ã¨ãã
Linuxã®ã©ã¤ãã©ãªã®åé¡
Interactive shell for blockdiag
Linux 動的ライブラリーの徹底調査ã«ãã£ãç»åãå ã«ã調ã¹ãè£è¶³ãå ãã¤ã¤å³ãæããªããã¾ãããå¾ã§ãªã³ã¯åãã«ãªã£ã¦ããã ãã
.a
ãã¡ã¤ã«ã¯Staticã©ã¤ãã©ãª.so
ã¯Shared Objectã§ãSharedã©ã¤ãã©ãªã- å³å¯ã«ã¯å ±æã©ã¤ãã©ãªã£ã¦è¨èã¯Sharedã©ã¤ãã©ãªã®äºã ã¨æããã©ãDynamic Linking(åçãªã³ã¯)ãã¦ä½¿ãæ¹ãæãäºãå¤ãã
- Dynamic Loadingã*1å ±æã©ã¤ãã©ãªã®ä¸ç¨®ã
- Dynamic Loadingã¯ãã¤ãããã¯ã©ã¤ãã©ãªã¨å¼ã°ããäºãããã
å ±æã©ã¤ãã©ãªã®Dynamic Linkingã¨Dynamic Loadingã«ã¤ãã¦
å³ã®åèã«ããIBMã®è¨äºãè±èªã ã£ãããããã®ã¾ã¾æ¸ãã¦ããã©ãDynamic Linkingã¨ã¯åçãªã³ã¯ãã¦ä½¿ãå ±æã©ã¤ãã©ãªã£ã¦äºã ã¨æããéã«Dynamic Loadingã¯åçãã¼ãã£ã³ã°ãã¦ä½¿ãå ±æã©ã¤ãã©ãªã ã¨æãã¾ãã
å ±æã©ã¤ãã©ãªã¯ãããã°ã©ã ã®å®è¡æã«ãã¼ãããã¾ãããã·ã³ã«ãã£ã¦ã¯ã ãã®å ±æã©ã¤ãã©ãªããªãã£ããããã¼ã¸ã§ã³ãéã£ãããã¦ãåä½ããªããã¨ãããã¾ãã .so 㨠.sa ã§çµãããã¡ã¤ã«ã§ãã.sa ã¯ãå¤ã a.out å½¢å¼ã§ä½¿ãããå ±æã©ã¤ãã©ãªã§ãã
CuÌîbm¯
ãã¤ãããã¯ã©ã¤ãã©ãªã¯ãå ±æã©ã¤ãã©ãªã®ï¼ç¨®ã§ããå®è¡æã«ãé¢æ°ã使ã£ã¦ ãã¼ãããããã¢ã³ãã¼ããããã§ãã¾ãã
ãã ãDynamic Loadingãå ±æã©ã¤ãã©ãªã¨å¼ãã§ãDynamic Loadingããã¤ãããã¯ã©ã¤ãã©ãªã¨å¼ãã§åãã¦ããè¨äºãããã¾ããã
MacãMach-Oã§ã¯
Mach-0 ã®ä»æ§ã®ä¸ã¤ã§ï¼å¤ãã®äººãé©ããããã®ã¨ãã¦ï¼ å ±æã©ã¤ãã©ãª 㨠åçãã¼ããã«ã»ã¢ã¸ã¥ã¼ã«ãå³å¯ã«åºå¥ããç¹ãããã¾ãï¼ ELF ã·ã¹ãã ã§ã¯ä¸¡è ã¯å質ã§ï¼å ±æã³ã¼ãã®ã©ã®é¨åã§ãï¼ã©ã¤ãã©ãªã¨ãã¦ãåçãã¼ãã£ã³ã°ã«ã使ããã¨ãã§ãã¾ãï¼
Mach-O å ±æã©ã¤ãã©ãª ã®ãã¡ã¤ã«ã¿ã¤ã㯠MH_DYLIB ã§ï¼æ¡å¼µå㯠.dylib ã¨ãªãã¾ãï¼ ããã¯é常ã®éçãªã³ã«ãã©ã°ï¼ä¾ãã° libfoo.dylib ã®å ´å㯠-lfoo ã§ãªã³ã¯ãããã¨ãã§ãã¾ãï¼ ãããï¼ã¢ã¸ã¥ã¼ã«ã¨ãã¦ãã¼ããããã¨ã¯ã§ãã¾ããï¼
Fink - 移植 - 共有コード
ã¾ããDynamic Loadingã®äºãåçãã¼ããã«ã»ã¢ã¸ã¥ã¼ã«ã¨ãã¢ã¸ã¥ã¼ã«ã¨å¼ãã§ã¾ãããªã®ã§ããã®è¨äºã§ã¯ãå ±æã©ã¤ãã©ãª=Dynamic Linkingã«ãªãã£ã½ãã
- Linuxã§ã¯Dynamic LinkingãDynamic Loadingãåãç©ã§ã使ãæ¹ã®åé¡ã¨ãã¦ãDynamic Linkingã¨Dynamic Loadingãããã
- Dynamic Loadingã§ä½¿ãå ´åãã©ã¤ãã©ãªã¨ãã¦ã¨ãããããã¢ã¸ã¥ã¼ã«ã¨ãã¦ã¨ããæãæ¹ãæ£ããã®ãããããªãã
- Macã§ã¯Dynamic Linkingã¨Dynamic Loadingã¯å³å¯ã«åºå¥ããã¦ããã
ãã¼ããã«ã»ã¢ã¸ã¥ã¼ã«ã¯ Mach-O ã®ç¨èªã§ã¯"ãã³ãã«"ã¨è¨ããï¼ãã¡ã¤ã«ã¿ã¤ã㯠MH_BUNDLE ã§ãï¼ ãããç¨ããã³ã³ãã¼ãã³ãã¯æ¡å¼µåãæ°ã«ããªãã®ã§ï¼æ¡å¼µåã¯ä½ã§ãæ§ãã¾ããï¼ .bundle ã¨ããæ¡å¼µåã Apple ã®æ¨å¥¨ã§ããï¼ç§»æ¤ãããã½ããã¦ã§ã¢ã®ã»ã¨ãã©ã¯ï¼äºææ§ã®ãã .so ã使ã£ã¦ãã¾ãï¼ ãã³ãã«ã¯ dyld API ãç¨ãã¦åçã«ãã¼ãï¼ã¢ã³ãã¼ãããããã¨ãã§ãã¾ããï¼ãã® API ã®ä¸ã« dlopen() ãã¨ãã¥ã¬ã¼ãããã©ãããããã¾ãï¼ ãã³ãã«ã å ±æã©ã¤ãã©ãª ã®ããã«ãªã³ã¯ãããã¨ã¯ã§ãã¾ãããï¼ãã³ãã«ã å ±æã©ã¤ãã©ãª ã«ãªã³ã¯ããããã¨ã¯å¯è½ã§ãï¼ ãã®å ´åï¼ãã³ãã«ããã¼ããããéã«ä¸¡è ã¨ããã¼ãããã¾ãï¼
Fink - 移植 - 共有コード
åãè¨äºã®ç¶ãã
ä½è«
ããç¥ããªãåéã®äºã§ãåããã¨ãæãè¨èãè²ã ãã£ã¦ãã¨ããããæåã«è¦ãããã®ã軸ã«ãã¦ã¿ããã©ããã£ããåããã«ããããDynamic Linkingã¨Dynamic Loadingããç¡ãã¦å¥ã®è¨èã軸ã«ããã°ããã£ãããããã®2ã¤ãã©ãå¼ã¶ã®ãå¤ãã®äººã«åããããããã ããï¼
ãã®ä»åè
æ¸ããæ¥
2012-08-11
ä¾ã«ãã£ã¦ä¸æ¸ãã®ã¾ã¾æ¾ç½®ãã¦ã
*1:åè¿°ã®éãå ±æã©ã¤ãã©ãªã¨ããã°Dynamic Linkingã®äºãæãäºãå¤ããã©