me
me copied to clipboard
Swift & C (Part 3: mix compile)
通过Xcode可以很方便的在swift项目中加入bridge header和c file,通过命令行也可以实现, 下面介绍的方式是我个人尝试,未必是标准答案,辩证理解:
- 通过gcc/clang -c编译c生成object file
- swiftc通过同时输入swift和object file
- 通过
import-obj-header
增加bridge文件
src/main.swift
import Foundation
func main() {
let version = RTMP_LibVersion()
print(String(format: "0x%08x", version))
hello()
}
main()
src/bridge.h
#include "librtmp/amf.h"
#include "librtmp/log.h"
#include "librtmp/rtmp.h"
void hello(void);
Makefile
SRC=src
BUILD=build
TARGET=$(BUILD)/app
all: $(BUILD) $(TARGET)
$(TARGET): $(SRC)/main.swift $(BUILD)/foo.o
swiftc -import-objc-header $(SRC)/bridge.h -Iinclude -lrtmp -Llib -o $@ $^
$(BUILD):
@mkdir -p $@
$(BUILD)/foo.o : $(SRC)/foo.c
clang -c -o $@ $<
run: $(TARGET)
@$(TARGET)
clean:
@rm -rf $(BUILD)
.PHONY: clean run all
code: streamr.zip