2016-05-31 2 views
8

Mac 컴퓨터에서 Swift를 컴파일하는 동안 동적 라이브러리 libswiftDemangle.dylib이 생성되었습니다. 리눅스 머신에서 생성 된 동적 라이브러리가 필요하지만 소스 코드를 컴파일 한 후에는 동적 라이브러리가 생성되지 않습니다. lib/SwiftDemangle/CMakeLists.txt에서libswiftDemangle.so on Linux

파일 CMakeLists.txt에는 다음이 포함

add_swift_library(swiftDemangle SHARED 
    SwiftDemangle.cpp 
    MangleHack.cpp 
    LINK_LIBRARIES swiftBasic) 

지시어는, 그러나 라이브러리가 만들어지지 않습니다.

이 명령을 사용하여 프로젝트를 빌드하면 결국 cmakeninja이 실행되어 프로젝트가 빌드됩니다.

아이디어가 있으십니까?

+0

'add_swift_library'의 정의를 살펴보십시오. 아마도 여러분에게 몇 가지 실마리를 줄 것입니다. – arrowd

+0

그러나 라이브러리는 생성되지 않습니다. "- 이것은 무엇을 의미합니까? 빌드 프로세스의 출력에 라이브러리가 빌드 된 것으로 표시되지 않습니까? 아니면 그냥 .dylib 파일을 찾을 수 없습니까? – Tsyvarev

+0

@ goodd 좋은 아이디어, 그러나 나는 기능에서 길을 잃었다 - 그것은 거대하다! './cmake/modules/AddSwift.cmake' – agoldis

답변

1

필자는 아마도 늦어도 Linux에서 라이브러리가 빌드되지 않는 이유를 설명 할 수 있습니다. 당신이 언급 라이브러리를 포함
주요 하위 디렉토리는 다음과 같습니다

https://github.com/apple/swift/tree/master/lib 

이 하위 디렉토리에 구성되어 그 디렉토리에있는 libs와 빌드하려면, 다음 CMakeLists.txt가 사용됩니다

https://github.com/apple/swift/blob/master/lib/CMakeLists.txt.

이 파일에서 분명히 알 수 있듯이 시스템이 OSX/Darwin이고 Linux가 아닌 경우에만 언급 된 라이브러리가 빌드됩니다. 상기 CMakeLists.txt에서 관련 코드는 다음과 같습니다

if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") 
    add_subdirectory(SwiftDemangle) 
endif() 

리눅스에 건설 될 SwiftDemangle 방지

add_subdirectory(RemoteAST) 
add_subdirectory(Sema) 
add_subdirectory(Serialization) 
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") 
    add_subdirectory(SwiftDemangle) 
endif() 
add_subdirectory(SIL) 
add_subdirectory(SILGen) 

당신이 그것을 볼 수 있듯이. 설치하거나 단지 *.dylib 파일을 simlynk합니다

https://github.com/apple/swift/blob/master/lib/SwiftDemangle/CMakeLists.txt 

:
피상적 이중 검사가보고 될 수 있습니다.
그것은 (당신이 묻는 것과 다른)을 swift-demangle 도구

https://github.com/apple/swift/tree/master/tools/swift-demangle 

가 리눅스를 기반으로 언급 할 가치가.