(Teresa, perhaps you can correct me if I'm wrong here) On Thu, Aug 9, 2018 at 2:21 PM Mateusz Zych via cfe-users < cfe-users@lists.llvm.org> wrote:
> Hi :) > > I am trying to compile simple project consisting of an executable "app" > and static library "bar". > Note that I'm enabling thinLTO for both "app" and "bar". > > //////////////////////////////////////// > // bar.h // > //////////////////////////////////////// > #ifndef BAR > #define BAR > > void bar (); > > #endif > //////////////////////////////////////// > > //////////////////////////////////////// > // bar.cpp // > //////////////////////////////////////// > #include "bar.h" > #include <iostream> > > void bar () > { > std::cout << "Bar" << std::endl; > } > //////////////////////////////////////// > > //////////////////////////////////////// > // app.cpp // > //////////////////////////////////////// > #include "bar.h" > #include <iostream> > > int main() > { > std::cout << "App" << std::endl; > bar(); > } > //////////////////////////////////////// > > > When I'm using llvm-ar and llvm-ranlib to create static library everything > works fine: > > $ clang++ -flto=thin -c bar.cpp -o bar.o > $ llvm-ar cr bar.a bar.o > $ llvm-ranlib bar.a > $ clang++ -flto=thin -c app.cpp -o app.o > $ clang++ -flto=thin -o app app.o bar.a > > > However using default ar and ranlib provided by my GNU/Linux distribution > results in linking failure: > > $ clang++ -flto=thin -c bar.cpp -o bar.o > $ ar cr bar.a bar.o > $ ranlib bar.a > $ clang++ -flto=thin -c app.cpp -o app.o > $ clang++ -flto=thin -o app app.o bar.a > bar.a: *error adding symbols: Archive has no index; run ranlib to add one* > clang: error: linker command failed with exit code 1 (use -v to see > invocation) > > > Note that for GCC using default ar and ranlib works fine: > > $ g++ -flto -c bar.cpp -o bar.o > $ ar cr bar.a bar.o > $ ranlib bar.a > $ g++ -flto -c app.cpp -o app.o > $ g++ -flto -o app app.o bar.a > > > Obviously using gcc-ar and gcc-ranlib also works fine: > > $ g++ -flto -c bar.cpp -o bar.o > $ gcc-ar cr bar.a bar.o > $ gcc-ranlib bar.a > $ g++ -flto -c app.cpp -o app.o > $ g++ -flto -o app app.o bar.a > > > My question is: *Can I use ar and ranlib provided by GNU/Linux with > clang++?* > Not when using LTO, so far as I know. Otherwise, yes. (no idea if llvm-ar/llvm-ranlib are totally general purpose replacements for those tools, but I guess they are roughly/generally so) > > If not, then to properly setup clang as a default compiler on GNU/Linux > machine, > I should not only run update-alternatives for cc and c++ commands, > but also somehow do that for ar and ranlib commands? > > $ sudo update-alternatives --config cc > $ sudo update-alternatives --config c++ > > > That's very problematic since update-alternatives doesn't work with ar and > ranlib: > > $ sudo update-alternatives --config ar > update-alternatives: error: no alternatives for ar > $ sudo update-alternatives --config ranlib > update-alternatives: error: no alternatives for ranlib > > Looks like you can teach update-alternatives to support new commands with the --install option? > > If default ar and ranlib is expected to not work with clang++, > then how should I setup Clang as a default compiler on GNU/Linux? > > Thanks, Mateusz Zych > _______________________________________________ > cfe-users mailing list > cfe-users@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users >
_______________________________________________ cfe-users mailing list cfe-users@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users