[lldb-dev] Linker error on fresh working copy

Greg Clayton gclayton at apple.com
Mon Dec 2 08:10:14 PST 2013


Ignore these warnings for now, I will fix them soon. The "lldb-platform" binary links against many internal LLDB and clang libraries and the visibility settings are set incorrectly which is an easy fix.

Greg

On Nov 23, 2013, at 10:57 AM, Félix Cloutier <felixcca at yahoo.ca> wrote:

> Disregard the Python errors, that was because of me. (The warnings remain, though.)
> 
> Le 2013-11-23 à 11:58:33, Félix Cloutier <felixcca at yahoo.ca> a écrit :
> 
>> Right, I forgot to delete llvm-build.
>> 
>> I deleted llvm-build and made a clean build, but now I get different linker errors. First, I get about 50 warnings that there is direct access to several weak symbols from lldb-platform:
>> 
>> ld: warning: direct access in (anonymous namespace)::ASTInfoCollector::ReadLanguageOptions(clang::LangOptions const&, bool) to global weak symbol llvm::IntrusiveRefCntPtr<clang::TargetInfo>::getPtr() const 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 (anonymous namespace)::ASTInfoCollector::ReadTargetOptions(clang::TargetOptions const&, bool) to global weak symbol llvm::IntrusiveRefCntPtr<clang::TargetInfo>::getPtr() const 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 (anonymous namespace)::ASTInfoCollector::ReadTargetOptions(clang::TargetOptions const&, bool) to global weak symbol llvm::IntrusiveRefCntPtr<clang::TargetInfo>::getPtr() const means the weak symbol cannot be overridden at runtime. This was likely caused by different translation units being compiled with different visibility settings.
>> [...]
>> 
>> lldb-platform still compiles (although this looks very odd), but the LLDB framework doesn't compile because symbols used by LLDBWrapPython.cpp are apparently not found (54 of them):
>> 
>>   "lldb::SBDebugger::GetSummaryForType(lldb::SBTypeNameSpecifier)", referenced from:
>>       __wrap_SBDebugger_GetSummaryForType in LLDBWrapPython.o
>>   "lldb::SBDebugger::GetSyntheticForType(lldb::SBTypeNameSpecifier)", referenced from:
>>       __wrap_SBDebugger_GetSyntheticForType in LLDBWrapPython.o
>>   "lldb::SBTypeSummary::GetOptions()", referenced from:
>>       __wrap_SBTypeSummary_GetOptions in LLDBWrapPython.o
>>   "lldb::SBTypeSummary::SetOptions(unsigned int)", referenced from:
>>       __wrap_SBTypeSummary_SetOptions in LLDBWrapPython.o
>>   "lldb::SBTypeSummary::GetDescription(lldb::SBStream&, lldb::DescriptionLevel)", referenced from:
>>       __wrap_SBTypeSummary_GetDescription in LLDBWrapPython.o
>>       lldb_SBTypeSummary___str__(lldb::SBTypeSummary*) in LLDBWrapPython.o
>> [...]
>> 
>> Any idea?
>> 
>> Le 2013-11-23 à 00:05:34, Jason Molenda <jmolenda at apple.com> a écrit :
>> 
>>> I added --enable-cxx11 to build-llvm.pl, removed my existing llvm-build directory, did a clean build with Xcode and I got a successful link.
>>> 
>>> The problem came up due to the changes in r195239.  When included in C++11 mode, SmallPtrSet.h calls a method in SmallPtrSet.cpp (in llvm).  llvm was being built in C++03 mode so the additional method wasn't emitted for SmallPtrSet.o; lldb included SmallPtrSet.h in C++11 mode so a reference to that function was emitted.
>>> 
>>> (just to state the obvious - I'm sure we were all on the same page here)
>>> 
>>> 
>>> 
>>> On Nov 22, 2013, at 6:42 PM, Félix Cloutier <felixcca at yahoo.ca> wrote:
>>> 
>>>> I'm building from Xcode, so I guess I need to change scripts/build-llvm.pl. Xcode reports this when I build:
>>>> 
>>>> % cd '/Users/felix/Projets/OpenSource/lldb/llvm-build/Release+Asserts/x86_64' && '/Users/felix/Projets/OpenSource/lldb/llvm/configure' --enable-targets=x86_64,arm --disable-terminfo --enable-cxx11 --enable-optimized --enable-assertions --enable-libcpp --build=x86_64-apple-darwin11
>>>> 
>>>> --enable-cxx11 is there, but even with that build completing successfully I still get the same error.
>>>> 
>>>> Félix
>>>> 
>>>> Le 2013-11-22 à 04:15:21, Arnaud A. de Grandmaison <arnaud.adegm at gmail.com> a écrit :
>>>> 
>>>>> On 11/22/2013 07:56 AM, Félix Cloutier wrote:
>>>>>> Hello people,
>>>>>> 
>>>>>> I got the lldb source fresh from SVN, and even after doing the little Python dance for Mavericks (setting SDKROOT to macosx10.8 like Jason Molenda suggested yesterday), I still get compile errors. The linker bails out with this when it tries to link lldb-platform:
>>>>>> 
>>>>>> Undefined symbols for architecture x86_64:
>>>>>>  "llvm::SmallPtrSetImpl::SmallPtrSetImpl(void const**, unsigned int, llvm::SmallPtrSetImpl&&)", referenced from:
>>>>>>      llvm::SmallPtrSet<DWARFDebugInfoEntry const*, 4u>::SmallPtrSet(llvm::SmallPtrSet<DWARFDebugInfoEntry const*, 4u>&&) in liblldb-core.a(SymbolFileDWARF.o)
>>>>>> ld: symbol(s) not found for architecture x86_64
>>>>>> clang: error: linker command failed with exit code 1 (use -v to see invocation)
>>>>>> 
>>>>>> Looking deeper, I found that it is declared like that:
>>>>>> 
>>>>>> #if LLVM_HAS_RVALUE_REFERENCES
>>>>>>  SmallPtrSetImpl(const void **SmallStorage, unsigned SmallSize,
>>>>>>                  SmallPtrSetImpl &&that);
>>>>>> #endif
>>>>>> 
>>>>>> Could it be that llvm is built without LLVM_HAS_RVALUE_REFERENCES but lldb is built with it?
>>>>>> 
>>>>> 
>>>>> Hi Felix,
>>>>> 
>>>>> I also got this problem. It comes from the fact that lldb is built in c++11 mode (required), whereas your llvm codebase is built without. You should compile llvm in c++11 as well, or some functions will simply not be in the libraries.
>>>>> 
>>>>> If your are using cmake, I submitted (but diid not commit) a patch to optionally enable c++11 building with cmake a few hours ago on the llvm-commit list. For an autoconf build, there is an --enable-cxx11 to configure.
>>>>> 
>>>>> Cheers,
>>>>> --
>>>>> Arnaud
>>>>> 
>>>>>> Félix
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> lldb-dev mailing list
>>>>>> 
>>>>>> lldb-dev at cs.uiuc.edu
>>>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>>>> 
>>>>> 
>>>>> -- 
>>>>> Arnaud A. de Grandmaison
>>>>> 
>>>> 
>>>> _______________________________________________
>>>> lldb-dev mailing list
>>>> lldb-dev at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
>>> 
>> 
> 
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev





More information about the lldb-dev mailing list