2016-05-31 38 views
8

Durante la compilazione di Swift su computer Mac, è stata creata una libreria dinamica libswiftDemangle.dylib. Ho bisogno anche della libreria dinamica creata sulla macchina Linux, tuttavia la libreria dinamica non viene creata dopo una compilazione di un codice sorgente.libswiftDemangle.so su Linux

Il file CMakeLists.txt a lib/SwiftDemangle/CMakeLists.txt contiene:

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

direttiva, tuttavia la libreria non viene creato.

Io uso questo comando ./swift/utils/build-script -R -c --build-subdir build --install-prefix /mnt/servers/swift/install -j4 per creare il progetto, eventualmente viene eseguito cmake e ninja per creare il progetto.

Qualche idea?

+0

Dai un'occhiata alla definizione di 'add_swift_library', forse ti darebbe qualche indizio. – arrowd

+0

'tuttavia la libreria non viene creata. - Che cosa significa? L'output del processo di build non mostra che la libreria è stata costruita? O semplicemente non riesci a trovare il file '.dylib' creato? – Tsyvarev

+0

@arrowd buona idea, mi sono perso nella funzione tuttavia - è enorme! './cmake/modules/AddSwift.cmake' – agoldis

risposta

1

Posso dare una spiegazione spiegando perché la libreria non viene costruita su Linux, anche se è probabilmente in ritardo.
La sottodirectory principale che contiene la libreria si parla è:

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

per costruire le librerie in quella directory, che sono organizzati in sottodirectory, il seguente CMakeLists.txt viene utilizzato:

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

Come si può vedere chiaramente in questo file, la libreria che si menziona viene creata solo se il sistema è OSX/Darwin e non nel caso Linux. Il codice in questione nella citata CMakeLists.txt è:

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) 

Come si può vedere,

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

impedisce SwiftDemangle ad essere costruita su Linux.
un doppio controllo superficiale, può essere quella di guardare:

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

che installerà o simlynk solo *.dylib file.
E vale la pena ricordare che lo strumento swift-demangle (diverso da quello che hai chiesto)

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

è costruita su Linux.