labath added a comment. In https://reviews.llvm.org/D29333#661994, @beanz wrote:
> In https://reviews.llvm.org/D29333#661979, @labath wrote: > > > I was thinking about that as well. I am not sure if it will work if we > > actually need multiple iterations of the loop to get all the dependencies > > converging, but it may be worth trying out. > > > The way it is supposed to work, CMake will duplicate the libraries on the > command line in the right order to avoid the need for looping at all. I am not sure that is enough. Imagine this: X.a(x1.o x2.o) Y.a(y1.o y2.o) if X depends on Y and vice-versa, cmake will add something like -lX -lY -lX however, if the dependency graph is something like: main.o -> x1.o -> y1.o -> x2.o -> y2.o then this won't be enough because by the time the linker figures out it really needs y2.o it will already have scanned past the -lY, and the link will still fail. It this example it is enough to repeat all libraries twice, but in theory the chain can be arbitrarily long and cmake has no way of figuring that out. labath4 /tmp/X $ nm x.a x1.o: 0000000000000000 T _x1 U _y1 x2.o: 0000000000000000 T _x2 U _y2 labath4 /tmp/X $ nm y.a y1.o: U _x2 0000000000000000 T _y1 y2.o: 0000000000000000 T _y2 labath4 /tmp/X $ gcc main.c /tmp/ccAoBLxC.o: In function `main': main.c:(.text+0xa): undefined reference to `_x1' collect2: error: ld returned 1 exit status labath4 /tmp/X $ gcc main.c x.a y.a x.a x.a(x2.o): In function `_x2': a.c:(.text+0xa): undefined reference to `_y2' collect2: error: ld returned 1 exit status labath4 /tmp/X $ gcc main.c x.a y.a x.a y.a && echo OK OK That said, maybe the situation in lldb is not so dire, and it will actually work -- only one way to find out. https://reviews.llvm.org/D29333 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits