[llvm-dev] Link error on Linux

Russell Wallace via llvm-dev llvm-dev at lists.llvm.org
Fri Mar 25 09:27:32 PDT 2016


Right, it needed to be in LDADD instead of LDFLAGS. The combination of that
and -fno-rtti did the trick. Thanks!

On Fri, Mar 25, 2016 at 7:47 AM, Mehdi Amini <mehdi.amini at apple.com> wrote:

> Looking again at your link line, I think static library has to appear
> after their uses. So try to put the .o before the list of library.
>
> --
> Mehdi
>
> On Mar 25, 2016, at 12:41 AM, Russell Wallace <russell.wallace at gmail.com>
> wrote:
>
> Yeah, seems to.
>
> a at a-VirtualBox:~$ nm /home/a/build//lib/libLLVMSupport.a  | grep
> ZN4llvm4outsEv
>                  U _ZN4llvm4outsEv
>                  U _ZN4llvm4outsEv
> 0000000000000000 b _ZGVZN4llvm4outsEvE1S
> 0000000000000000 T _ZN4llvm4outsEv
> 0000000000000000 r _ZZN4llvm4outsEvE19__PRETTY_FUNCTION__
> 0000000000000000 b _ZZN4llvm4outsEvE1S
>                  U _ZN4llvm4outsEv
>
> I can try building with RTTI, it'll just take a few hours to run the build.
>
> On Fri, Mar 25, 2016 at 7:38 AM, Mehdi Amini <mehdi.amini at apple.com>
> wrote:
>
>> Since the log tells you that llvm::outs() is not found, and since it is
>> supposed to be found in libLLVMSupport.a, you can try:
>>
>> $ nm /home/a/build//lib/libLLVMSupport.a  | grep ZN4llvm4outsEv
>> ...
>> 0000000000002070 T __ZN4llvm4outsEv
>> ...
>>
>>
>> The output should have the symbol defined.
>>
>> --
>> Mehdi
>>
>>
>>
>> On Mar 25, 2016, at 12:18 AM, Russell Wallace via llvm-dev <
>> llvm-dev at lists.llvm.org> wrote:
>>
>> Tried that just now, same result.
>>
>> On Fri, Mar 25, 2016 at 6:58 AM, Snehasish Kumar <
>> kumar.snehasish at gmail.com> wrote:
>>
>>> Hi Russel,
>>>
>>> Can you try compiling aklo.o using -fno-rtti prior to linking?
>>>
>>> On Thu, Mar 24, 2016 at 11:44 PM, Russell Wallace via llvm-dev
>>> <llvm-dev at lists.llvm.org> wrote:
>>> > I'm trying to link a program with LLVM on Linux. I've managed to take
>>> out
>>> > the test files from 'llvm-config --libs' but now it's getting errors
>>> with
>>> > missing symbols. The same program successfully links with the same
>>> version
>>> > of LLVM (3.8) on Windows, so it's not a problem with the code per se,
>>> it's
>>> > some kind of configuration issue. Any ideas?
>>> >
>>> > g++ -std=c++11 -I/home/a/llvm/include -I/home/a/build/include
>>> > -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS
>>> > -D__STDC_LIMIT_MACROS -g -O2 -L/home/a/build//lib
>>> > -lLLVMLTO -lLLVMObjCARCOpts -lLLVMSymbolize -lLLVMDebugInfoPDB
>>> > -lLLVMDebugInfoDWARF -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen
>>> > -lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter
>>> > -lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser
>>> > -lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter
>>> > -lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser
>>> > -lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter
>>> > -lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser
>>> > -lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter
>>> > -lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo
>>> -lLLVMNVPTXAsmPrinter
>>> > -lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info
>>> -lLLVMMSP430AsmPrinter
>>> > -lLLVMMipsDisassembler -lLLVMMipsCodeGen -lLLVMMipsAsmParser
>>> -lLLVMMipsDesc
>>> > -lLLVMMipsInfo -lLLVMMipsAsmPrinter -lLLVMHexagonDisassembler
>>> > -lLLVMHexagonCodeGen -lLLVMHexagonAsmParser -lLLVMHexagonDesc
>>> > -lLLVMHexagonInfo -lLLVMCppBackendCodeGen -lLLVMCppBackendInfo
>>> > -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo -lLLVMBPFAsmPrinter
>>> > -lLLVMARMDisassembler -lLLVMARMCodeGen -lLLVMARMAsmParser -lLLVMARMDesc
>>> > -lLLVMARMInfo -lLLVMARMAsmPrinter -lLLVMAMDGPUCodeGen
>>> -lLLVMAMDGPUAsmParser
>>> > -lLLVMAMDGPUDesc -lLLVMAMDGPUUtils -lLLVMAMDGPUInfo
>>> -lLLVMAMDGPUAsmPrinter
>>> > -lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser
>>> > -lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter
>>> > -lLLVMAArch64Utils -lLLVMMIRParser -lLLVMLibDriver -lLLVMOption
>>> > -lLLVMTableGen -lLLVMLineEditor -lLLVMX86Disassembler
>>> -lLLVMX86AsmParser
>>> > -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter -lLLVMX86Desc
>>> > -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter -lLLVMX86Utils
>>> > -lLLVMMCJIT -lLLVMPasses -lLLVMipo -lLLVMVectorize -lLLVMLinker
>>> > -lLLVMIRReader -lLLVMAsmParser -lLLVMDebugInfoCodeView
>>> -lLLVMInterpreter
>>> > -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine -lLLVMInstrumentation
>>> > -lLLVMProfileData -lLLVMBitWriter -lLLVMOrcJIT -lLLVMTransformUtils
>>> > -lLLVMExecutionEngine -lLLVMTarget -lLLVMAnalysis -lLLVMRuntimeDyld
>>> > -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMMC -lLLVMCore
>>> > -lLLVMSupport                        -ldl -lpthread -ltinfo  -o aklo
>>> > aklo-aklo.o
>>> > aklo-aklo.o: In function `operator()':
>>> > /mnt/a2/aklo.cpp:442: undefined reference to `llvm::outs()'
>>> > aklo-aklo.o: In function
>>> `llvm::raw_ostream::operator<<(llvm::StringRef)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:166: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(char const*, unsigned long)'
>>> > aklo-aklo.o: In function `operator()':
>>> > /mnt/a2/aklo.cpp:443: undefined reference to `llvm::outs()'
>>> > /mnt/a2/aklo.cpp:447: undefined reference to `llvm::outs()'
>>> > /mnt/a2/aklo.cpp:450: undefined reference to `llvm::outs()'
>>> > /mnt/a2/aklo.cpp:452: undefined reference to `llvm::outs()'
>>> > aklo-aklo.o: In function `llvm::raw_ostream::operator<<(char const*)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:166: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(char const*, unsigned long)'
>>> > aklo-aklo.o: In function
>>> `llvm::raw_ostream::operator<<(llvm::StringRef)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:166: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(char const*, unsigned long)'
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:166: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(char const*, unsigned long)'
>>> > aklo-aklo.o: In function `operator()':
>>> > /mnt/a2/aklo.cpp:430: undefined reference to `llvm::errs()'
>>> > aklo-aklo.o: In function `llvm::raw_ostream::operator<<(char)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:141: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(unsigned char)'
>>> > aklo-aklo.o: In function `error(std::string)':
>>> > /mnt/a2/aklo.cpp:172: undefined reference to
>>> > `llvm::SourceMgr::PrintMessage(llvm::SMLoc, llvm::SourceMgr::DiagKind,
>>> > llvm::Twine const&, llvm::ArrayRef<llvm::SMRange>,
>>> > llvm::ArrayRef<llvm::SMFixIt>, bool) const'
>>> > aklo-aklo.o: In function `print(long)':
>>> > /mnt/a2/aklo.cpp:388: undefined reference to `llvm::outs()'
>>> > /mnt/a2/aklo.cpp:393: undefined reference to `llvm::outs()'
>>> > aklo-aklo.o: In function `llvm::raw_ostream::operator<<(char)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:141: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(unsigned char)'
>>> > aklo-aklo.o: In function `print(long)':
>>> > /mnt/a2/aklo.cpp:395: undefined reference to `llvm::outs()'
>>> > /mnt/a2/aklo.cpp:401: undefined reference to `llvm::outs()'
>>> > /mnt/a2/aklo.cpp:398: undefined reference to `llvm::outs()'
>>> > aklo-aklo.o: In function `llvm::raw_ostream::operator<<(char)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:141: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(unsigned char)'
>>> > aklo-aklo.o: In function `llvm::StringMap<long,
>>> > llvm::MallocAllocator>::find(llvm::StringRef) const':
>>> > /home/a/llvm/include/llvm/ADT/StringMap.h:284: undefined reference to
>>> > `llvm::StringMapImpl::FindKey(llvm::StringRef) const'
>>> > aklo-aklo.o: In function `llvm::StringMap<long,
>>> > llvm::MallocAllocator>::insert(std::pair<llvm::StringRef, long>)':
>>> > /home/a/llvm/include/llvm/ADT/StringMap.h:331: undefined reference to
>>> > `llvm::StringMapImpl::LookupBucketFor(llvm::StringRef)'
>>> > /home/a/llvm/include/llvm/ADT/StringMap.h:344: undefined reference to
>>> > `llvm::StringMapImpl::RehashTable(unsigned int)'
>>> > aklo-aklo.o: In function `llvm::raw_ostream::operator<<(char const*)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:166: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(char const*, unsigned long)'
>>> > aklo-aklo.o: In function `llvm::raw_ostream::operator<<(std::string
>>> > const&)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:184: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(char const*, unsigned long)'
>>> > aklo-aklo.o: In function `print(long)':
>>> > /mnt/a2/aklo.cpp:398: undefined reference to
>>> > `llvm::raw_ostream::operator<<(long)'
>>> > aklo-aklo.o: In function `llvm::raw_ostream::operator<<(char)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:141: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(unsigned char)'
>>> > aklo-aklo.o: In function `llvm::cl::list<std::string, bool,
>>> > llvm::cl::parser<std::string> >::getOptionWidth() const':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:1387: undefined
>>> reference to
>>> > `llvm::cl::basic_parser_impl::getOptionWidth(llvm::cl::Option const&)
>>> const'
>>> > aklo-aklo.o: In function `llvm::cl::list<std::string, bool,
>>> > llvm::cl::parser<std::string> >::printOptionInfo(unsigned long) const':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:1390: undefined
>>> reference to
>>> > `llvm::cl::basic_parser_impl::printOptionInfo(llvm::cl::Option const&,
>>> > unsigned long) const'
>>> > aklo-aklo.o: In function `~basic_parser':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:763: undefined
>>> reference to
>>> > `vtable for llvm::cl::basic_parser<std::string>'
>>> > aklo-aklo.o: In function `~Option':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:290: undefined
>>> reference to
>>> > `vtable for llvm::cl::Option'
>>> > aklo-aklo.o: In function `~basic_parser':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:763: undefined
>>> reference to
>>> > `vtable for llvm::cl::basic_parser<std::string>'
>>> > aklo-aklo.o: In function `~Option':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:290: undefined
>>> reference to
>>> > `vtable for llvm::cl::Option'
>>> > aklo-aklo.o: In function
>>> `llvm::raw_ostream::operator<<(llvm::StringRef)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:166: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(char const*, unsigned long)'
>>> > aklo-aklo.o: In function `main':
>>> > /mnt/a2/aklo.cpp:434: undefined reference to
>>> > `llvm::sys::PrintStackTraceOnErrorSignal(bool)'
>>> > aklo-aklo.o: In function `PrettyStackTraceProgram':
>>> > /home/a/llvm/include/llvm/Support/PrettyStackTrace.h:63: undefined
>>> reference
>>> > to `llvm::PrettyStackTraceEntry::PrettyStackTraceEntry()'
>>> > /home/a/llvm/include/llvm/Support/PrettyStackTrace.h:63: undefined
>>> reference
>>> > to `vtable for llvm::PrettyStackTraceProgram'
>>> > /home/a/llvm/include/llvm/Support/PrettyStackTrace.h:64: undefined
>>> reference
>>> > to `llvm::EnablePrettyStackTrace()'
>>> > aklo-aklo.o: In function `main':
>>> > /mnt/a2/aklo.cpp:456: undefined reference to
>>> > `llvm::cl::AddExtraVersionPrinter(void (*)())'
>>> > /mnt/a2/aklo.cpp:457: undefined reference to
>>> > `llvm::cl::ParseCommandLineOptions(int, char const* const*, char
>>> const*)'
>>> > /mnt/a2/aklo.cpp:460: undefined reference to
>>> > `llvm::MemoryBuffer::getFileOrSTDIN(llvm::Twine const&, long, bool)'
>>> > /mnt/a2/aklo.cpp:469: undefined reference to `llvm::outs()'
>>> > aklo-aklo.o: In function `~PrettyStackTraceProgram':
>>> > /home/a/llvm/include/llvm/Support/PrettyStackTrace.h:58: undefined
>>> reference
>>> > to `vtable for llvm::PrettyStackTraceProgram'
>>> > /home/a/llvm/include/llvm/Support/PrettyStackTrace.h:58: undefined
>>> reference
>>> > to `llvm::PrettyStackTraceEntry::~PrettyStackTraceEntry()'
>>> > aklo-aklo.o: In function `llvm::raw_ostream::operator<<(char)':
>>> > /home/a/llvm/include/llvm/Support/raw_ostream.h:141: undefined
>>> reference to
>>> > `llvm::raw_ostream::write(unsigned char)'
>>> > aklo-aklo.o: In function `main':
>>> > /mnt/a2/aklo.cpp:463: undefined reference to `llvm::errs()'
>>> > /mnt/a2/aklo.cpp:463: undefined reference to
>>> `llvm::SMDiagnostic::print(char
>>> > const*, llvm::raw_ostream&, bool, bool) const'
>>> > aklo-aklo.o: In function `PrettyStackTraceProgram':
>>> > /home/a/llvm/include/llvm/Support/PrettyStackTrace.h:63: undefined
>>> reference
>>> > to `llvm::PrettyStackTraceEntry::~PrettyStackTraceEntry()'
>>> > aklo-aklo.o: In function `~PrettyStackTraceProgram':
>>> > /home/a/llvm/include/llvm/Support/PrettyStackTrace.h:58: undefined
>>> reference
>>> > to `vtable for llvm::PrettyStackTraceProgram'
>>> > /home/a/llvm/include/llvm/Support/PrettyStackTrace.h:58: undefined
>>> reference
>>> > to `llvm::PrettyStackTraceEntry::~PrettyStackTraceEntry()'
>>> > aklo-aklo.o: In function `__static_initialization_and_destruction_0':
>>> > /mnt/a2/aklo.cpp:164: undefined reference to
>>> `llvm::SourceMgr::~SourceMgr()'
>>> > aklo-aklo.o: In function `Option':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:253: undefined
>>> reference to
>>> > `vtable for llvm::cl::Option'
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:253: undefined
>>> reference to
>>> > `llvm::cl::GeneralCategory'
>>> > aklo-aklo.o: In function `parser':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:938: undefined
>>> reference to
>>> > `vtable for llvm::cl::parser<std::string>'
>>> > aklo-aklo.o: In function `llvm::cl::list<std::string, bool,
>>> > llvm::cl::parser<std::string> >::done()':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:1398: undefined
>>> reference to
>>> > `llvm::cl::Option::addArgument()'
>>> > aklo-aklo.o: In function `~basic_parser':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:763: undefined
>>> reference to
>>> > `vtable for llvm::cl::basic_parser<std::string>'
>>> > aklo-aklo.o: In function `~Option':
>>> > /home/a/llvm/include/llvm/Support/CommandLine.h:290: undefined
>>> reference to
>>> > `vtable for llvm::cl::Option'
>>> >
>>> aklo-aklo.o:(.rodata._ZTIN4llvm2cl4listISsbNS0_6parserISsEEEE[_ZTIN4llvm2cl4listISsbNS0_6parserISsEEEE]+0x18):
>>> > undefined reference to `typeinfo for llvm::cl::Option'
>>> >
>>> aklo-aklo.o:(.rodata._ZTVN4llvm2cl4listISsbNS0_6parserISsEEEE[_ZTVN4llvm2cl4listISsbNS0_6parserISsEEEE]+0x20):
>>> > undefined reference to `llvm::cl::Option::anchor()'
>>> >
>>> aklo-aklo.o:(.rodata._ZTVN4llvm2cl4listISsbNS0_6parserISsEEEE[_ZTVN4llvm2cl4listISsbNS0_6parserISsEEEE]+0x48):
>>> > undefined reference to `llvm::cl::Option::addOccurrence(unsigned int,
>>> > llvm::StringRef, llvm::StringRef, bool)'
>>> > collect2: error: ld returned 1 exit status
>>> >
>>> >
>>> > _______________________________________________
>>> > LLVM Developers mailing list
>>> > llvm-dev at lists.llvm.org
>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>> >
>>>
>>>
>>>
>>> --
>>> Snehasish Kumar
>>> School of Computing Science
>>> Simon Fraser University
>>>
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160325/9497ff02/attachment-0001.html>


More information about the llvm-dev mailing list