2019年5月13日星期一

making a static lib using another static lib

8
Static libraries are just archives of object (.o) files, so you can't have embedded dependency information. Something like ar cr lib1.a foo.o bar.o [more object files] will build your libraries.
Because there is no dependency information, your main program has to link both the libraries and it's important to link lib1 after lib2 when lib2 depends on lib1 (otherwise the linker won't find the symbols that are unresolved in lib2). A linking step could therefore look like this (assuming you use gcc and your libraries are in the current directory):
gcc -otest main.o -L. -Wl,-Bstatic -l2 -l1
  • +1 I thought the same but due to less experience in C I didn't answered. (Y) – Harneet Singh Aug 5 '17 at 12:19
  • @rici the linker is not in the scope of the standard. This is about the GNU linker. You can list the same library twice in an invocation if necessary. – user2371524 Aug 5 '17 at 14:45
  • For libraries, it is possible to place them twice on the command line:-l1 -l2 -l1 will handle references in either direction including mutual recursion. – rici Aug 5 '17 at 14:49
  • That's what I just wrote, responding to your now-deleted comment. – user2371524 Aug 5 '17 at 14:50
  • Felix, libraries are not in scope but the linker is part of the implementation. The standard provides for translation units and a mechanism to run a complete program, so there must be something like a linker. – rici Aug 5 '17 at 14:56
  • As to the other, i misread your answer so i deleted the complaint. Typing on glass is slow, at least for me. Sorry for the confusion. – rici Aug 5 '17 at 14:57 
  • Isn't there a way to make l2.lib contain the l1.lib objects as well? So when linking to the parent project of l2.lib only l2.lib will be linked? – Royi Apr 20 at 6:54

2019年5月5日星期日

show macro debug info

gcc -g3 testxed.c -Ixed/include xed/lib/libxed.a -o testxed

readelf --debug-dump=macro ./testxed