【发布时间】:2017-03-20 12:00:05
【问题描述】:
我有一个用 Swift 编写的函数,我想从 Rust 调用它。我尝试通过Objective-C 公开它,但是我继续从ld 收到错误,说它找不到_foo。 Rust 项目通过将 Rust 项目编译为静态库来链接到 Swift 项目。
foo.h
#pragma once
#include <stdint.h>
uint8_t foo_bridge(uint8_t);
foo.m
#import <Foundation/Foundation.h>
#import <Foo-Swift.h>
uint8_t foo_bridge(uint8_t byte) {
return foo(byte);
}
bar.swift
public func foo(byte: UInt8) -> UInt8 {
return byte * 2
}
src/lib.rs
extern "C" {
pub fn foo_bridge(byte: u8) -> u8;
}
Bar-Bridging-Header.h
#import "foo.h"
Cargo.toml
[package]
name = "foo"
version = "0.1.0"
[lib]
name = "foo"
crate-type = ["staticlib"]
【问题讨论】:
-
您需要提供更多信息。这是一个链接器错误,但您没有指定有关如何将 swift 项目链接到 Rust 项目的任何信息。
-
@ker 已更新。我通过将 rust 项目编译为静态库来链接。
-
所以我误解了......你在你的 swift 项目中链接 Rust 项目?你是如何快速做到这一点的?请发布完整的命令行。我非常不清楚您将什么链接到错误发生的位置和方式。
-
完整的命令行?这是在 XCode 中,我刚刚创建了一个 Objective-C 桥接头,并且工作正常。你可以在这里阅读更多它是如何工作的:bignerdranch.com/blog/building-an-ios-app-in-rust-part-1
标签: objective-c swift rust ffi