gpt4 book ai didi

module - xcrun swift 在命令行上生成 :0: error: could not load shared library

转载 作者:搜寻专家 更新时间:2023-10-30 21:57:59 26 4
gpt4 key购买 nike

我的目标是尝试像脚本一样运行我的 Swift 程序。如果整个程序是独立的,您可以像这样运行它:

% xcrun swift hello.swift

hello.swift 在哪里

import Cocoa
println("hello")

但是,我想更进一步,包括 swift 模块,我可以在其中导入其他类、函数等。

假设我们有一个非常好的类,我们想在 GoodClass.swift 中使用

public class GoodClass {
public init() {}
public func sayHello() {
println("hello")
}
}

我现在想将这个好东西导入到我的 hello.swift 中:

import Cocoa
import GoodClass

let myGoodClass = GoodClass()
myGoodClass.sayHello()

我首先通过运行以下命令生成 .o、lib<>.a、.swift 模块:

% xcrun swiftc -emit-library -emit-object GoodClass.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name GoodClass
% ar rcs libGoodClass.a GoodClass.o
% xcrun swiftc -emit-module GoodClass.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name GoodClass

最后,我准备运行我的 hello.swift(就好像它是一个脚本):

% xcrun swift -I "./" -L "./" -lGoodClass -sdk $(xcrun --show-sdk-path --sdk macosx) hello.swift 

但是我得到了这个错误:

< unknown >:0: error: could not load shared library 'libGoodClass'

这是什么意思?我错过了什么。如果我继续,并执行类似于您为 C/C++ 执行的链接/编译操作:

% xcrun swiftc -o hello -I "./" -L "./" -lGoodClass -sdk $(xcrun --show-sdk-path --sdk macosx) hello.swift
% ./hello

然后万事大吉。我想我可以接受,但仍然想了解共享库错误。

最佳答案

这是一个重新格式化的简化 bash 脚本,用于构建您的项目。您不需要使用 -emit-object 和后续转换。您的命令不会导致生成 libGoodClass.dylib 文件,这是您运行时 -lGoodClass 参数所需的链接器 xcrun swift -I "./"-L "./"-lGoodClass -sdk $(xcrun --show-sdk-path --sdk macosx) hello.swift。您也没有使用 -module-link-name 指定要链接的模块。

这对我有用:

#!/bin/bash

xcrun swiftc \
-emit-library \
-module-name GoodClass \
-emit-module GoodClass.swift \
-sdk $(xcrun --show-sdk-path --sdk macosx)

xcrun swift -I "." -L "." \
-lGoodClass \
-module-link-name GoodClass \
-sdk $(xcrun --show-sdk-path --sdk macosx) hello.swift

关于module - xcrun swift 在命令行上生成 <unknown> :0: error: could not load shared library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com