swift之Linux 上的 libswiftDemangle.so

webabcd 阅读:947 2023-08-22 18:30:54 评论:0

在 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 来构建项目。

有什么想法吗?

请您参考如下方法:

我可以试着解释为什么这个库没有在 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 构建。


标签:linux
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

全民解析

全民解析

关注我们