我按照this page的说明编写了Curses包装模块。使用C库导入Swift模块
但是,我不知道如何正确使它在使用它的模块中工作。
我有3个并行目录:CCurses,CursesWrapper,ModuleUsingCursesWrapper。
CCurses包含一个空Package.swift文件和含有
module CCurses [system] {
header "/usr/include/curses.h"
link "curses"
export *
}
CursesWrapper一个module.modulemap文件包含含有Package.swift文件。
import PackageDescription
let package = Package(dependencies: [.Package(url: "../CCurses", majorVersion: 1)])
和含有
import CCurses
public func startCurses() -> Void{
initscr()}
public func getchar() -> Void{
getch()}
public func endCurses() -> Void{
endwin()}
ModuleUsingCursesWrapper一个general.swift文件包含含有
import PackageDescription
let package = dependencies: [.Package(url: "../CursesWrapper", majorVersion: 1)])
和含有main.swift文件一个文件Package.swift
import CursesWrapper
startCurses()
getchar()
endCurses()
运行时在ModuleUsingCursesWrapper宁迅速积累,我得到下面的输出:
Cloning Packages/CursesWrapper Cloning Packages/CCurses Compiling Swift Module 'CursesWrapper' (1 sources) Linking Library: .build/debug/CursesWrapper.a Compiling Swift Module 'ModuleUsingCursesWrapper' (1 sources) Linking Executable: .build/debug/ModuleUsingCursesWrapper .../ModuleUsingCursesWrapper/.build/debug/CursesWrapper.a(general.swift.o): In function `_TF14CursesWrapper11startCursesFT_T_': .../ModuleUsingCursesWrapper/Packages/CursesWrapper-1.0.0/general.swift:5: undefined reference to `initscr' .../ModuleUsingCursesWrapper/.build/debug/CursesWrapper.a(general.swift.o): In function `_TF1CursesWrapper7getcharFT_T_': .../ModuleUsingCursesWrapper/Packages/CursesWrapper-1.0.0/general.swift:8: undefined reference to `getch' .../ModuleUsingCursesWrapper/.build/debug/CursesWrapper.a(general.swift.o): In function `_TF14CursesWrapper9endCursesFT_T_': .../ModuleUsingCursesWrapper/Packages/CursesWrapper-1.0.0/general.swift:11: undefined reference to `endwin' clang: error: linker command failed with exit code 1 (use -v to see invocation) < unknown >:0: error: link command failed with exit code 1 (use -v to see invocation) < unknown :0: error: build had 1 command failures swift-build: exit(1): [".../Swift/usr/bin/swift-build-tool", "-f", ".../ModuleUsingCursesWrapper/.build/debug/ModuleUsingCursesWrapper.o/llbuild.yaml"]
看来,编译ModuleUsingCursesWrapper时,诅咒功能无法找到。我怎么解决这个问题 ?
(我在Linux上)
有些打包程序会遗漏libcurses.so和libncurses.so之间的链接(您可以将链接参数更改为“ncurses”以解决此问题)。 –
事实上,在下载最新的Swift快照(2015年12月21日)之前,我更改为ncursesw,但当时仍然无法正常工作。 –