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 <[email protected]> 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 <[email protected]> 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 >>> >>> [email protected] >>> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev >> >> >> -- >> Arnaud A. de Grandmaison >> > > _______________________________________________ > lldb-dev mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev _______________________________________________ lldb-dev mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev
