当前位置: 首页 > 面试题库 >

从OS X命令行编译和链接Swift加Objective C代码

卓胜
2023-03-14
问题内容

从OS X命令行编译Swift:

swift -sdk $(xcrun --show-sdk-path --sdk macosx) test.swift

从命令行编译目标C:

clang -lobjc -framework Foundation -c testObject.m

我可以将-c选项添加到任一编译器以生成.o文件。

如何将这两个源文件链接到一个应用程序中?

还是需要建造更多?


问题答案:

TL; DR :最好使用Xcode工具,因为有很多事情要进行。但是也可以只使用命令行工具。

我会警告您,这是一个如何编译和运行与Cocoa和Swift运行时链接的.m.swift文件的快速而肮脏的示例。我什至没有尝试遵循双方的最佳做法。

假设您有一个Objective-C类:

$ cat C.h
#import <Cocoa/Cocoa.h>
@interface C : NSObject
@property (retain) NSString *c;
@end

$ cat C.m
#import "C.h"

@implementation C

- (id)init {
  self = [super init];
  self.c = @"Hello world!";
  return self;
}

@end

您有一个使用该类的Swift文件:

$ cat S.swift
let c = C()

println(c.c)

您只需要将Objective-C和Swift文件.o分别编译为文件:

xcrun clang C.m -o C.o -c
# Be sure to import the bridge header (our only header in this example)
xcrun swiftc -c S.swift -import-objc-header C.h -F /System/Library/Frameworks -I/usr/include

如您所见,我们必须手动包含框架和标头路径,以使Swift编译器找到正确的文件(最好是在SDK中而不是当前安装的文件btw中查找它们)xcrun --show-sdk-path))。

然后,我们只需要链接它们,即可拉出所有Swift和Objective-C运行时库。由于swift默认情况下提取了Objective-
C库,因此我们甚至不需要指定太多:

xcrun swiftc -o app C.o S.o

看,我们的可执行文件已链接,我们可以运行它!

$ ./app
Hello world!

这都是非常有趣的,但是我建议不要直接使用这些工具,除非您实际上是为您的项目构建针对它们的项目构建系统,并且有充分的理由不使用Xcode /
xcodebuild



 类似资料:
  • 问题内容: 尝试1,香草链接到图书馆 我正在尝试使用修补版本的OpenSSL(因此DTLS更易于使用)。OpenSSL在 ./include/openssl子文件夹有大量的头文件(我认为应该如此): GCC链接到include文件夹,并给我一个错误-它找不到SSL。我或多或少地在使用与别人相同的东西。这在OSX(10.6)上有效,但在Ubuntu上无效: 尝试2,符号链接到/ usr / incl

  • 问题内容: 如何在Mac和Linux上从命令行编译和上传Arduino 草图?我已经安装了Arduino编程环境。哪里有一些示例makefile? 问题答案: 从1.5.0开始,通过标志直接支持在arduino可执行文件上直接在命令行(在Windows,Mac和Linux上)编译和上传草图(与C / C ++源代码有关)。 一个ino可以被编译和上传 文献资料

  • 问题内容: 我想知道如何从Windows Shell中使用JavaFX编译代码。 我在以下代码fxservidor.java: 问题答案: Oracle Java 8 如果您使用的是Oracle Java 8或更高版本(如cayhorstmann在其回答中所指出),则JavaFX类现在位于Oracle Java实现的默认运行时类路径上。您可以直接运行javac,并java在你的程序和JavaFX类

  • 主要内容:SDKMAN!,创建和运行第一个程序,hello.kt,运行 REPL(交互式解释器),使用命令行执行脚本Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2,目前最新为 1.1.2-2。 你可以选择一个最新的稳定版下载。 下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。 SDKMAN! 在 OS X、Linux、

  • Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2,目前最新为 1.1.2-2。 你可以选择一个最新的稳定版下载。 下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。 SDKMAN! 在 OS X、Linux、Cygwin、F

  • 问题内容: 我想这样链接命令: 由于80列长度的原因,我想将链分成几行,但是Go不会让我编译它: 我能做什么 ? 问题答案: 正如FUZxxl指出的那样,您的问题是分号的自动插入。规格说明: 当输入被分解为令牌时,如果该行的最终令牌为,则将分号自动插入到非空白行的末尾的令牌流中。 标识符 整数,浮点数,虚数,符文或字符串文字 关键字之一break,continue,fallthrough或retu