2014-07-24 3 views
2

Clang/LLVM의 일부로 LLDB를 작성하려고합니다. LLVM, Clang, Compiler-RT 및 Extras는 OK입니다. 그러나 LLVM은 다른 구성 요소로 빌드 할 때 문제점이 있습니다.정의되지 않은 기호 SystemRuntimeMacOSX :: Initialize 및 SystemRuntimeMacOSX :: Terminate

디렉터리 구조는 LLVM/Clang/LLDB 지침에 따라 설정됩니다. LLDB의 문서는 Building LLDB에 있습니다. llvm 디렉토리 옆에 놓여 build 디렉토리에서 실행 된 아래의 (모든 소스의 압축을 푼 된 곳 llvm입니다) :

$ cd build 
$ ../llvm/configure --enable-optimized --enable-cxx11 --enable-libcpp --prefix=/usr/local 
... 
$ make -j4 
... 
llvm[4]: Compiling ARM_DWARF_Registers.cpp for Release+Asserts build 
llvm[4]: Compiling KQueue.cpp for Release+Asserts build 
llvm[4]: Compiling PseudoTerminal.cpp for Release+Asserts build 
llvm[4]: Compiling Range.cpp for Release+Asserts build 
llvm[4]: Compiling SharingPtr.cpp for Release+Asserts build 
llvm[4]: Compiling StringExtractor.cpp for Release+Asserts build 
llvm[4]: Compiling StringExtractorGDBRemote.cpp for Release+Asserts build 
llvm[4]: Compiling TimeSpecTimeout.cpp for Release+Asserts build 
llvm[4]: Building Release+Asserts Archive Library liblldbUtility.a 
llvm[3]: Linking Release+Asserts Shared Library liblldb.dylib 
Undefined symbols for architecture x86_64: 
    "SystemRuntimeMacOSX::Initialize()", referenced from: 
     lldb_private::Initialize() in liblldbInitAndLog.a(lldb.o) 
    "SystemRuntimeMacOSX::Terminate()", referenced from: 
     lldb_private::Terminate() in liblldbInitAndLog.a(lldb.o) 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make[3]: *** [/Users/jwalton/Clang-3.4.2/build/Release+Asserts/lib/liblldb.dylib] Error 1 
make[2]: *** [all] Error 1 
make[1]: *** [all] Error 1 
make: *** [all] Error 1 

편집 : 매트의 instructions below, 나는 Undefined symbols SystemRuntimeMacOSX::Initialize and SystemRuntimeMacOSX::Terminate을 피할 수 있었다 다음과 같습니다. 그러나 빌드가 여전히 함께 사망 :

llvm[4]: Compiling ARM_DWARF_Registers.cpp for Release+Asserts build 
llvm[4]: Compiling KQueue.cpp for Release+Asserts build 
llvm[4]: Compiling PseudoTerminal.cpp for Release+Asserts build 
llvm[4]: Compiling Range.cpp for Release+Asserts build 
llvm[4]: Compiling SharingPtr.cpp for Release+Asserts build 
llvm[4]: Compiling StringExtractor.cpp for Release+Asserts build 
llvm[4]: Compiling StringExtractorGDBRemote.cpp for Release+Asserts build 
llvm[4]: Compiling TimeSpecTimeout.cpp for Release+Asserts build 
llvm[4]: Building Release+Asserts Archive Library liblldbUtility.a 
make[3]: *** No rule to make target `/Users/jwalton/Clang-3.4.2/build/Release+Asserts/lib/liblldbPluginSystemRuntimeMacOSX.a', 
needed by `/Users/jwalton/Clang-3.4.2/build/Release+Asserts/lib/liblldb.dylib'. Stop. 

이상한 점은, lldbPluginSystemRuntimeMacOSXlldbPluginProcessMachCore 같은 다른 플러그인과 같은 처리됩니다. 동일한 지시문은 Cmake.txt과 같은 위치에 나타납니다.

호스트 플랫폼은 완전히 패치 된 OS X 10.8.5, x64입니다. Xcode 버전은 5.1.1 (5B1008) (최신 버전)입니다.

누군가 lldb를 LLVM 및 Clang으로 컴파일하려면 어떤 마법 단계를 수행해야하는지 알고 있습니까?

100 BOUNTY EDIT : 조리법에 붙여 넣기가 쉘 스크립트에 Clang 3.4.2 recipe입니다. 레시피는 Missing-Makefile을 사용하며 매트는이를 아래에 제공합니다. 레서피는 메이크 파일을 패치하므로 수동으로 수행 할 필요가 없습니다.

150 BOUNTY EDIT : Cos '답변이 마지막 단계였습니다. 이 질문은 매트의 대답과 코의 대답을 필요로합니다. Cos가 업데이트 된 레시피를 제공했습니다. 그것 Clang 3.4.2 Recipe (Final)에서 사용할 수 있습니다. 나는 일반적으로 그냥 lldb 소스를 이용 맥 OS X에서 Xcode의 프로젝트를 사용하여 구축하고,

답변

5

당신은 스크립트에 다음 패치를 추가해야합니다

sed -i '' '\|DIRS += Process/mach-core|a\ 
DIRS += SystemRuntime/MacOSX\ 
' llvm/tools/lldb/source/Plugins/Makefile 

Your updated recipe

+0

완벽하게, 이것이 마지막 단계였습니다. 나는 현상금을 부활 시켰고, 당신과 맷 사이에 분배 된 현상금을 얻는 방법을 알아 내려고 노력 중입니다. [보상금으로 현상금, 두 명의 수령인에게 보상] (http://meta.stackoverflow.com/questions/268972/bounty -as-reward-award-to-two-recipients)가 있습니다. – jww

4

는 수행

xcodebuild -configuration DebugClang 
:

cd lldb 
xcodebuild -configuration Debug 

또는 당신은뿐만 아니라 사물의 연타 측을 디버깅 할 경우

당신은 llvm 소스를 얻을 필요조차 없습니다. Xcode 프로젝트는 존재하지 않는다면 그들을 체크 아웃 할 것입니다 (그러나 당신이 브랜치에 대해 빌드하려고하는 버전을 오버라이드하지 않을 것입니다. 뭐든지 ...)

TOT lldb는 지금 당장 나를 위해 잘 지어줍니다.

당신이 그것을 어떤 이유로이 방법을 구축하려는 경우, 메이크 빌드를 사용하여 수행 lldb-dev에 메일 링리스트에있는 다른 사람이있다, 당신은 요청할 수 있습니다 내가 그 짐의 조언 위의 생각 볼께

+0

감사 짐. 나는 LLVM과 Clang의 일부로 건축 중입니다. 독립적 인 Xcode 프로젝트가 아닙니다. LLVM/Clang은 명령 행 프로젝트이며 구성 중에 LLDB를 자동으로 선택합니다. – jww

+0

많은 lldb 개발자가 그렇게 생각하지 않습니다. 우리 모두는 lldv를 lldb 빌드의 하위 디렉토리로 포함시키고 lldb가 llvm 빌드 (Xcode 또는 lldb cmake 파일 사용)에 대해 cmake를 구성하도록합니다. 원하는대로 수행하는 데는 아무 문제가 없지만 새로 작성하는 것은 잘못되었습니다. 산책로 ... 너 괜찮 으면, 좋아. lldb 중심의 빌드는 약간 다르게 배열 된 작동 clang 등을 초래한다는 점에 유의하십시오. 어쨌든 빌드가 제대로 작동하지 않으면 lldb-dev에 수정해야 할 사항에 대한 패치를 제출하여 작업이 손실되지 않도록하십시오. –

+0

* "lldb-dev로 수정해야 할 사항에 대한 패치를 제출하여 작업이 손실되지 않도록하십시오"* - 버그 20689, [LLDB가 OS X (Linux OK)에서 명령 줄에서 컴파일하지 못함] (http : /llvm.org/bugs/show_bug.cgi?id=20689)을 LLVM 버그 추적기에 추가하십시오. – jww

5

아마 최선의 선택입니다. 그러나 llvm + clang + lldb 3.4를 빌드하려고 시도한이 문제도 경험했습니다.

필자는 문제를 OS X에 특정한 특정 플러그인으로 좁혔으며, Make를 통해 전혀 빌드하지 않았습니다.

https://github.com/llvm-mirror/lldb/commit/7a53199e140843235d2bd2b12182ceb764419c8a

당신은이 가이드로 위의 커밋 사용할 수 있습니다 : 이것은이 커밋에 의해 고정 된 빌드 시스템 버그이었다. 성공적으로 구축하려면 실제로 두 가지 변경 만 수행하면됩니다. 방금 로컬 복사본을 패치했습니다.

lldb/lib 디렉토리/메이크 "lldbPluginSystemRuntimeMacOSX.a은"행 다음에 추가해야 98

lldb/소스/플러그인/SystemRuntime /에서라도/메이크 다음과 같은 내용으로을 생성 할 필요가 :

##===- source/Plugins/SystemRuntime/MacOSX/Makefile ---------*- Makefile -*-===## 
# 
#      The LLVM Compiler Infrastructure 
# 
# This file is distributed under the University of Illinois Open Source 
# License. See LICENSE.TXT for details. 
# 
##===----------------------------------------------------------------------===## 

LLDB_LEVEL := ../../../.. 
LIBRARYNAME := lldbPluginSystemRuntimeMacOSX 
BUILD_ARCHIVE = 1 

include $(LLDB_LEVEL)/Makefile 

이 모든 작업을 완료하면 빌드를 마칠 수 있었고 제대로 작동하는 liblldb.dylib 버전을 구할 수있었습니다. 희망이 도움이!

+0

@Matt에게 감사드립니다. 이것은 두 단계 중 하나입니다. 나는 현상금을 부활 시켰고, 당신과 Cos 사이에 분배 된 현상금을 얻는 방법을 알아 내려고 노력 중입니다. [보상금으로 현상금, 두 명의 수령인에게 보상] (http://meta.stackoverflow.com/questions/268972/bounty -as-reward-award-to-two-recipients)가 있습니다. – jww