C dylib暴露如下
__attribute__((visibility("default"))) int addNumber(int number) {
return 0;
}
在我的Swift项目中,我将Import Paths目录设置为包含我的module.map文件的目录:
module MyLib {
header "myLib.h"
export *
}
我手动将 myLib.h
添加到我的项目中:
#ifndef mylib_h
#define mylib_h
int addNumber(int number);
#endif
我的 main.swift
执行以下操作:
import Foundation
import MyLib
print("Hello, World!")
var result = addNumber(3)
当我编译swift项目时,我可以看到它链接到我的dylib(-lMyLib),但是我收到以下错误:
体系结构x86_64的未定义符号:“_ addNumber”,引用自:main.o中的_main ld:未找到体系结构x86_64 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)
所以尽管它找到了符号 . 我已经用 nm
(0000000000000d00(TEXT, text)外部addNumber)和Hopper验证了这个函数确实存在于dylib中 .
1 回答
在C库中,您的函数必须用
extern "C"
标记为C链接:这样编译器就不会破坏导出的名称 . Swift只能调用C函数,而不能调用C函数 .
另见What is the effect of extern "C" in C++? .