2012-04-23 2 views

답변

11

이것은 CMake와 관련이없는 것으로 판명되었습니다. clang++은 기본적으로 시스템 링커를 사용합니다. 예를 들어,

echo "#include <atomic>\n int main() { return 0; }" \ 
    | clang++ -x c++ -std=c++11 -stdlib=libc++ - 

응용 프로그램을 연결 /usr/bin/ld을 이용한다. llvm-link에 링커를 변경하려면, 하나는 처음

echo "#include <atomic>\n int main() { return 0; }" \ 
    | clang++ -x c++ -std=c++11 -stdlib=libc++ -S -emit-llvm -o - - \ 
    | llvm-link -o binary - 

/usr/bin/ld를 우회 : 링커를 호출 한 후 예컨대을 LLVM 바이트 코드를 방출하고, 필요가있다.

+4

그리고 어떻게 cmake를 통해이 작업을 수행 할 수 있습니까? –

+0

'시스템 링커'라고하면'$ PATH'에서 제일 먼저 찾거나'/ usr/bin/'에있는 코드를 사용하기 위해 하드 코드로 하드 ​​코드 된 것입니까? – Ephemera

+0

Clang은 링커 검색 경로 AFAIK를 하드 코드하고'$ PATH' 이외의 다른 장소에서'ld' 바이너리를 가져 오려고 시도합니다. "시스템 링커"는 LLVM 바이트 코드 링커와 달리 네이티브 오브젝트 코드의 표준 링커를 나타냅니다. – mavam

5

3.4에서 clang은 경로에서 ld을 찾기 전에 GCCInstallation.getParentLibPath() + "/../" + GCCInstallation.getTriple().str() + "/bin"에서 링커 (ld)를 찾습니다. 링커를 /usr/lib/gcc/<arch><sub>-<vendor>-<sys>-<abi>/<version>/ld에 넣고 clang에 의해 1 단계에서 호출 할 수 있어야합니다. 이 위치를 수동으로 지정하려면 문서화되지 않은-B 플래그를 사용하십시오. 안타깝게도 ld.gold를 사용하여 검색되는 링커의 이름을 변경하거나 lld가 앞서 언급 한 위치에서 심볼릭 링크를 요구하는 방식이 있다고 생각하지 않습니다.

관련 문제