Мой коллега пытается собрать Apple Swift на Ubuntu16.04 ppc64le.Да, я знаю, что Apple Swift еще не полностью поддерживается на ppc64le, но каким-то образом она построила его на ppc64le, используя скрипт сборки из https://github.com/ppc64le/build-scripts/blob/60b7885f4f0915a8671b3cfb86ddbb65f9b988a8/swift/swift41_ubuntu_16.04.sh.
Однако при запускекод, он выдает следующую ошибку «нет такого модуля 'Foundation'"
root @ ubuntu-sun: / home / ServerSideSwiftTap # swift build Компилировать Swift-модуль 'ServerSideSwiftTap' (3 источника) / home / ServerSideSwiftTap/main.swift:1:8: ошибка: нет такого модуля 'Foundation'
import Foundation ^
/ home / ServerSideSwiftTap / main.swift: 1: 8: ошибка: такого модуля нет'Foundation'
import Foundation ^
/ home / ServerSideSwiftTap / main.swift: 1: 8: ошибка: нет такого модуля 'Foundation'
import 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.Любое предложение?
Отредактировано
Я думаю, что я покончил с проблемой модуля '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 основной вывод:
Я погуглил вокруги я думаю, что я должен сделать "sudo make install" для swift-corelibs-libdispatch.Однако, это заканчивается следующей ошибкой, которая мне кажется довольно неприятной.
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.
Package.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)
Заранее спасибо.