ï¼ã¤ã® static libraryï¼ libX.a 㨠libY.a ãçµåã㦠libAll.a ãçæããæ¹æ³ã§ã
ãã®è¨äºã¯ 複数の静的ライブラリ (.a) を結合する方法 - pyopyopyo - Linuxとかプログラミングの覚え書き - ã®æ¹è¨çã§ã
Linux ã®å ´å (æ¹æ³1)
ar scripts ã使ãã¾ãï¼
ar scripts (GNU Binary Utilities)
å ·ä½çã«ã¯arã³ãã³ãã« "-M" ãªãã·ã§ã³ãä»ä¸ãã¦èµ·åãã¾ãï¼
$ ar -M
ããã¨æ¨æºå ¥åããã¹ã¯ãªãããåãä»ããã®ã§ï¼libAll.a ãçæã㦠libX.a 㨠libY.a ã追å ããã¹ã¯ãªãããå ¥åãã¾ã
create libAll.a addlib libX.a addlib libY.a save
ããã Makefile ã§èªåå®è¡ããã«ã¯æ¬¡ã®ãããªã«ã¼ã«ãæ¸ãã¾ã
libAll.a : libX.a libY.a @echo "create $@\n" $(addprefix addlib , $(addsuffix \\n, $^)) "save" | ar -M
åä½åç
- create $@ 㯠create libAll.a ã«ç½®æããã¾ã
- $^ 㯠"libX.a libY.a" ã®ãªã¹ãã«ç½®æããã¾ã
- $(addsuffix \\n, $^)ã§ "libX.a\n libY.a\n"ã«ç½®æããã¾ã
- $(addprefix addlib , "libX.a\n libY.a\n") 㯠"addlib libX.a\n addlib libY.a\n"ã«ç½®æããã¾ã
ã¾ã¨ããã¨
echo "create libAll.a \n " "addlib libX.a\n addlib libY.a\n" "save"
ãã¾ãå®è¡ã㦠ar script ã stdoutã«åºåï¼ãã¤ãçµç±ã§ ar -M ã®stdin ã«æ¸¡ããã¨ã«ãªãã¾ã
Linux ã®å ´å (æ¹æ³2)
å°ãéã Makefile ã®æ¸ãæ¹ãããã¾ã
libZ.a: libX.a libY.a $(RM) $@ $(AR) cqT $@ $^ echo "create $@\naddlib $@\nsave\nend" | ar -M
åä½åç
ä»çµã¿ã¨ãã¦ã¯
$ ar cqT libZ.a libX.a libY.a
ã§ï¼ã¾ã䏿çãªã©ã¤ãã©ãªã¨ã㦠libZ.a ãçæãã¾ã
ãã® libZ.a 㯠thin archive å½¢å¼ã§ä½æããã¦ãã¦
- ã·ã³ãã«ãã¼ãã«
- å ãã¡ã¤ã«ã®ãã¹å
ã®ã¿ãä¿æãã¦ãã¦ï¼ãã¼ã¿ãã³ã¼ãã®å®ä½ã¯å«ãã§ãã¾ãã
次㫠thin archive å½¢å¼ã®ã©ã¤ãã©ãªã ar scriptã§å¤æãã¾ãï¼
create libZ.a addlib libZ.a save end
ããã§æ°ãã libZ.a ã使ãï¼ãã¼ã¿ãã³ã¼ããå«ãã ã¹ã¿ãã£ãã¯ã©ã¤ãã©ãªãåºåãã¾ã