Каково влияние extern "C" в 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 в main.o ld: символы не найдены для архитектуры x86_64 clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова)
Поэтому, хотя он правильно связывается, он не может найти символы. Я проверил оба сnm
(0000000000000d00 (__TEXT, __ text) external addNumber) и Hopper, что эта функция существует в dylib.