首页 > 解决方案 > 苹果 swift 错误没有这样的模块'Foundation'

问题描述

我的一位同事正在尝试在 ppc64le Ubuntu16.04 上构建 apple swift。是的,我知道苹果 swift 在 ppc64le 上尚未完全支持,但不知何故,她使用https://github.com/ppc64le/build-scripts/blob/60b7885f4f0915a8671b3cfb86ddbb65f9b988a8/swift/swift41_ubuntu_16.04的构建脚本在ppc64le 上构建了它.sh

但是,在运行代码时,会产生以下错误“没有这样的模块'Foundation'”

root@ubuntu-sun:/home/ServerSideSwiftTap# swift build 编译 Swift 模块“ServerSideSwiftTap”(3 个来源)/home/ServerSideSwiftTap/main.swift:1:8:错误:没有这样的模块“Foundation”

进口基金会 ^

/home/ServerSideSwiftTap/main.swift:1:8: 错误:没有这样的模块'Foundation'

进口基金会 ^

/home/ServerSideSwiftTap/main.swift:1:8: 错误:没有这样的模块'Foundation'

进口基金会 ^

错误:终止(1):/root/swift-source2/Ninja-ReleaseAssert+stdlib-Release/swiftpm-linux-powerpc64le/powerpc64le-unknown-linux/release/swift-build-tool -f /home/ServerSideSwiftTap/.build /debug.yaml 主要输出:

我检查了我的构建脚本,似乎这也构建了 swift-corelibs-foundation。有什么建议吗?

已编辑

我想我通过将以下目录插入 PATH 变量来解决“基础”模块问题。

$ export PATH=/root/swift-source2/Ninja-ReleaseAssert+stdlib-Release/swiftpm-linux-powerpc64le:$PATH

但是现在我收到以下错误“没有这样的模块'Dispatch'”。

root@ubuntu-sun:/home/ServerSideSwiftTap# swift build 编译 Swift 模块“Schrodinger”(1 个来源)编译 Swift 模块“Cheetah”(7 个来源)编译 Swift 模块“CryptoKitten”(10 个来源)编译 Swift 模块“BSON”( 21 个来源)/home/ServerSideSwiftTap/.build/checkouts/Schrodinger.git--4853784622312920879/Sources/Schrodinger.swift:1:8: 错误:没有这样的模块“调度”导入调度 ^ 错误:终止(1):/root /swift-source2/Ninja-ReleaseAssert+stdlib-Release/swiftpm-linux-powerpc64le/powerpc64le-unknown-linux/release/swift-build-tool -f /home/ServerSideSwiftTap/.build/debug.yaml 主要输出:

我四处搜索,我想我必须为 swift-corelibs-libdispatch 执行“sudo make install”。但是,它最终会出现以下错误,这对我来说看起来很讨厌。

root@ubuntu-sun:~/swift-source2/swift-corelibs-libdispatch# ./autogen.sh

root@ubuntu-sun:~/swift-source2/swift-corelibs-libdispatch# ./configure

root@ubuntu-sun:~/swift-source2/swift-corelibs-libdispatch# make
...
In file included from source.c:21:
In file included from ./internal.h:973:
In file included from ./inline_internal.h:2465:
./trace.h:258:4: error: invalid operand in inline asm: '990: nop.pushsection .note.stapsdt,"?","note".balign 4.4byte 992f-991f,994f-993f,3991: .asciz "stapsdt"992: .balign 4993: .8byte 990b.8byte _.stapsdt.base.8byte dispatch_timer__wake_semaphore.asciz "dispatch".asciz "timer__wake".asciz "${0:n}@${1:I}$1 ${2:n}@${3:I}$3"994: .balign 4.popsection'
                        DISPATCH_TIMER_WAKE(ds, 
_dispatch_trace_timer_function(dr));
                    ^

以防万一,下面是ServerSideSwiftTap的源代码。

包.swift

// swift-tools-version:4.0

import PackageDescription

let package = Package(
                  name: "ServerSideSwiftTap",
                  products: [
                       .executable(name: "ServerSideSwiftTap", targets: 
["ServerSideSwiftTap"]),
                  ],
                  dependencies: [
                       .package(url: "../Cpcap", from: "0.0.1"),
                       .package(url: 
"https://github.com/OpenKitten/MongoKitten.git", from: "4.0.0"),
                  ],
                  targets: [
                       .target(name: "ServerSideSwiftTap", dependencies: 
["MongoKitten"], path: "."),
                  ]
)

main.swift

// import Foundation
import MongoKitten
import Cpcap
import Glibc

let server = try Server("mongodb://localhost:27017")
let database = server["packet_db"]

if server.isConnected {
    print("Connected successfully to server")
}

let MAX_RECV_SIZE:Int32 = 65535
let PROMISC:Int32 = 1
let TIMEOUT:Int32 = 100

var frameNo = 0

let ver = UnsafePointer<Int8>(pcap_lib_version())!
print("pcap version -> \(String(cString: ver))")

var errbuf = UnsafeMutablePointer<Int8>.allocate(capacity: 
Int(PCAP_ERRBUF_SIZE))
let dev = pcap_lookupdev(errbuf)
var devName = "ens2"
if let dev = dev {
    devName = String(cString: dev)
    print("found \(devName)")
} else {
    print("Could not get dev")
}

let pcapSession = pcap_open_live(devName, MAX_RECV_SIZE, PROMISC, TIMEOUT, errbuf)

let status = pcap_loop(pcapSession, -1, { (_, packHeader, packetData) in

// display header receiving order, time, size, etc
var tv_sec = Double(packHeader!.pointee.ts.tv_sec) + 60*60*9 // +0900
let sec = Int(tv_sec.truncatingRemainder(dividingBy: 60))
tv_sec = tv_sec / 60
let min = Int(tv_sec.truncatingRemainder(dividingBy: 60))
tv_sec = tv_sec / 60
let hour = Int(tv_sec.truncatingRemainder(dividingBy: 24))
frameNo = frameNo + 1
let str_Frame = String(format: "Frame %d: %d byte / %d byte %02d:%02d:%02d.%06ld", frameNo, packHeader!.pointee.caplen, packHeader!.pointee.len, hour, min, sec, packHeader!.pointee.ts.tv_usec)
//print(str_Frame)

// packet analyze
let data = Data(bytes: packetData!, count: Int(packHeader!.pointee.caplen))
let arrayPacketData = Array(data)
let pa = PacketAnalyser.sharedInstance
//pa.process(packetDataArray: arrayPacketData)
let packetData = pa.processPacket(packetDataArray: arrayPacketData)
if packetData.src_ip != "" {
    let userDocument: Document = [
"hour": String(format: "%02d", hour),
"minute": String(format: "%02d", min),
        "second": String(format: "%02d", sec),
        "mili_second": String(format: "%06d", packHeader!.pointee.ts.tv_usec),
        "src_ip": packetData.src_ip,
        "src_port": packetData.src_port,
        "dst_ip": packetData.dst_ip,
        "dst_port": packetData.dst_port,
        "data": packetData.data
    ]
    do {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyyMMdd"
        let str_date = dateFormatter.string(from: Date())
        let collection_name = "tcp_collection_\(str_date)"
        let collection = database[collection_name]
        try collection.insert(userDocument)
        print("success insert!!")
    } catch {
        print("tcp_collection insert error -> \ 
(error.localizedDescription)")
        }
    }

}, nil)

pcap_close(pcapSession)

提前致谢。

标签: swiftubuntufoundation

解决方案


推荐阅读