【问题标题】:libswiftDemangle.so on LinuxLinux 上的 libswiftDemangle.so
【发布时间】:2016-09-29 04:59:56
【问题描述】:

在 Mac 机器上编译 Swift 时,创建了一个动态库 libswiftDemangle.dylib。我也需要在 Linux 机器上创建的动态库,但是,动态库不是在编译源代码后创建的。

lib/SwiftDemangle/CMakeLists.txt 处的文件 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 来构建项目。

有什么想法吗?

【问题讨论】:

  • 看看add_swift_library的定义,或许能给你一些线索。
  • however the library isn't created. - 这是什么意思?构建过程的输出不显示库已构建?或者您只是找不到创建的.dylib 文件?
  • @arrowd 好主意,但是我迷失了这个功能 - 它很大! ./cmake/modules/AddSwift.cmake
  • @Tsyvarev 在 linux 上编译时没有创建它

标签: swift compilation cmake ninja demangler


【解决方案1】:

我可以解释一下为什么该库没有在 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()

防止 SwiftDemangle 在 Linux 上构建。
一个肤浅的复核可以看一下:

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 构建。

【讨论】:

    猜你喜欢
    • 2019-06-18
    • 2010-10-28
    • 2013-03-17
    • 2014-07-25
    • 2011-09-27
    • 2010-10-24
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多