2016-05-31 25 views
8

Podczas kompilowania Swifta na komputerze Mac, utworzono dynamiczną bibliotekę libswiftDemangle.dylib. Potrzebuję biblioteki dynamicznej utworzonej na komputerze z Linuksem, jednak biblioteka dynamiczna nie jest tworzona po kompilacji kodu źródłowego.libswiftDemangle.so na Linux

Plik CMakeLists.txt na lib/SwiftDemangle/CMakeLists.txt zawiera:

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

dyrektywa jednak biblioteka nie jest tworzony.

Używam tego polecenia ./swift/utils/build-script -R -c --build-subdir build --install-prefix /mnt/servers/swift/install -j4 do zbudowania projektu, ostatecznie działa cmake i ninja, aby zbudować projekt.

Wszelkie pomysły?

+0

Spójrz na definicję 'add_swift_library', może dałoby ci to kilka wskazówek. – arrowd

+0

'jednak biblioteka nie jest tworzona. - Co to znaczy? Wyjście procesu kompilacji nie pokazuje, że biblioteka jest zbudowana? Lub po prostu nie możesz znaleźć utworzonego pliku '.dylib'? – Tsyvarev

+0

@ dobry pomysł, zgubiłem się w funkcji - jest ogromny! './cmake/modules/AddSwift.cmake' – agoldis

Odpowiedz

1

Mogę zrobić zdjęcie wyjaśniające, dlaczego biblioteka nie jest budowana na Linuksie, nawet jeśli jest późno.
Głównym podkatalog zawierający bibliotekę wspomnieć to:

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

Aby budować bibliotekami w tym katalogu, które są zorganizowane w podkatalogach, następujące CMakeLists.txt służy:

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

Jak można wyraźnie zauważyć w tym pliku, biblioteka, o której wspominasz, jest budowana tylko wtedy, gdy system jest OSX/Darwin, a nie w przypadku systemu Linux. Odpowiedni kod w ww CMakeLists.txt jest:

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) 

Jak można go zobaczyć,

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

zapobiega SwiftDemangle być zbudowany na systemie Linux.
Powierzchowne double check można spojrzeć na:

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

który zainstaluje lub simlynk tylko *.dylib plików.
to warto wspomnieć, że narzędzie swift-demangle (różni się od tego, co pytasz)

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

jest zbudowany na systemie Linux.