9

Mac マシンで Swift をコンパイルすると、動的ライブラリlibswiftDemangle.dylibが作成されます。Linux マシン上で作成された動的ライブラリも必要ですが、ソース コードのコンパイル後に動的ライブラリが作成されません。

のファイルCMakeLists.txtlib/SwiftDemangle/CMakeLists.txtは次が含まれています。

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

ただし、ライブラリは作成されません。

このコマンドを使用し./swift/utils/build-script -R -c --build-subdir build --install-prefix /mnt/servers/swift/install -j4てプロジェクトをビルドし、最終的に実行cmakeninjaてプロジェクトをビルドします。

何か案は?

4

1 に答える 1

2

ライブラリが Linux でビルドされていない理由を説明することができます。
あなたが言及したライブラリを含むメインのサブディレクトリは次のとおりです。

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

サブディレクトリに編成されているそのディレクトリにライブラリを構築するには、次のものCMakeLists.txtが使用されます。

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

このファイルで明確にわかるように、言及したライブラリは、システムが OSX/Darwin の場合にのみビルドされ、Linux の場合にはビルドされません。前述の関連コード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)  

ご覧のとおり、

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

SwiftDemangleLinux でのビルドを防ぎます。
表面的な二重チェックは、次のことを確認することです。

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

ファイルのみをインストールまたはsimlynkし*.dylibます。
ツールに言及する価値がありswift-demangleます(あなたが尋ねたものとは異なります)

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

Linux上に構築されています。

于 2017-01-07T13:40:30.313 に答える