Bekket McClane via llvm-dev
2017-Jul-18 04:00 UTC
[llvm-dev] linker warning while using PluginLoader with PassInfo
Hi, I tried to write a simple Pass plugin loader to load passes. Here is the brief steps I did: 1. Declare a command line option like this: static cl::list<const PassInfo*, bool, PassNameParser> PassList(cl::desc(...)); 2. include “llvm/Support/PluginLoader.h” 3. Iterate over PassList to get each PassInfo, then invoke getNormalCtor to construct the pass Everything goes fine, I can also load plugin normally. However, there are some warning thrown during link time(of this tool): ld: warning: direct access in function 'llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::pri ntOptionInfo(unsigned long) const' from file '/usr/local/opt/llvm-clang/current/lib/libLLVMCore.a(LegacyPassMa nager.cpp.o)' to global weak symbol 'llvm::PassNameParser::ValLessThan(llvm::cl::parser<llvm::PassInfo const*> ::OptionInfo const*, llvm::cl::parser<llvm::PassInfo const*>::OptionInfo const*)' from file ‘MY OBJECT FILE' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings. ld: warning: direct access in function 'llvm::PassNameParser::printOptionInfo(llvm::cl::Option const&, unsigned long) const' from file '/usr/local/opt/llvm-clang/current/lib/libLLVMCore.a(Pass.cpp.o)' to global weak symbol 'llvm::PassNameParser::ValLessThan(llvm::cl::parser<llvm::PassInfo const*>::OptionInfo const*, llvm::cl::parser<llvm::PassInfo const*>::OptionInfo const*)' from file 'MY OBJECT FILE' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings. ld: warning: direct access in function 'non-virtual thunk to llvm::PassNameParser::printOptionInfo(llvm::cl::Option const&, unsigned long) const' from file '/usr/local/opt/llvm-clang/current/lib/libLLVMCore.a(Pass.cpp.o)' to global weak symbol 'llvm::PassNameParser::ValLessThan(llvm::cl::parser<llvm::PassInfo const*>::OptionInfo const*, llvm::cl::parser<llvm::PassInfo const*>::OptionInfo const*)' from file 'MY OBJECT FILE' means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings. I’m not quiet understand what it said. I copy nearly every code related to plugin loading from the opt tool. Could somebody answer this? Thank you Best Regards, Bekket McClane