<div dir="ltr">Hi All,<div><br></div><div>This test is on a ubuntu 12 box. Can anyone please point me what revision/commit-id of lld fixed this issue which was atleast in llvm 5.0.<div>.<br>├── build.sh<br>├── main.c<br>├── shared<br>│   └── sh.c<br>└── static<br>    └── st.c<br><br>[[ build.sh ]]<br><br>#!/bin/sh<br><br>CC="${TOOLCHAIN}/bin/clang"<br>AR="${TOOLCHAIN}/bin/llvm-ar"<br>CFLAGS="-g -O"<br>LDFLAGS="-fuse-ld=lld"<br><br>rm shared/sh.o static/st.o main.o<br>rm shared/libsh.so static/libst.a main<br><br>${CC} ${CFLAGS} -c shared/sh.c -o shared/sh.o<br>${CC} ${CFLAGS} ${LDFLAGS} -shared -o shared/libsh.so shared/sh.o<br><br>${CC} ${CFLAGS} -c static/st.c -o static/st.o<br>${AR} cq static/libst.a static/st.o<br><br>${CC} ${CFLAGS} -c main.c -o main.o<br><br>${CC} ${CFLAGS} ${LDFLAGS} -o main -Lshared -lsh -Lstatic -lst  main.o -Wl,-rpath=shared<br><br>[[ main.c ]]<br><br>void gn();<br><br>int main()<br>{<br>    gn();<br>    return 0;<br>}<br><br>[[ shared/sh.c ]]<br><br>#include <stdio.h><br><br>void gn(void);<br>void fn(void);<br><br>void gn()<br>{<br>    printf("Calling gn...\n");<br>    fn();<br>}<br><br>[[ static/st.c ]]<br><br>#include <stdio.h><br><br>void fn(void);<br><br>void fn()<br>{<br>    printf("Calling fn...\n");<br>}<br><br><br>Code flow:<br>main -> gn (shared library) -> fn (part of the static lib)<br><br>Result:<br>With llvm 5.0<br><br>./main<br>Calling gn...<br>./main: symbol lookup error: shared/libsh.so: undefined symbol: fn   <== symbol fn was not found in binary "main"<br><br>readelf -s main | grep fn</div><div><Nothing><br><br>With llvm 7.0<br><br>./main<br>Calling gn...<br>Calling fn...<br></div><div><br></div><div>readelf -s main | grep fn<br>     9: 0000000000001100    12 FUNC    GLOBAL DEFAULT   13 fn<br>    36: 0000000000001100    12 FUNC    GLOBAL DEFAULT   13 fn<br></div><div><br></div><div>Regards,</div><div>Karan</div></div></div>