Неопределенные символы для архитектуры x86_64: "_opt" - PullRequest
0 голосов
/ 16 октября 2019

Я написал простую функцию cpp для получения входных параметров из swift и использования этих параметров в функции cpp из библиотеки cpp (Если кто-то знаком с CPLEX, я в основном использую библиотеку CPLEX cpp в swift. Я хотел бы выполнить предварительную обработку проблемы и передать эти значения в cpp для оптимизации)

Простая функция cpp, которую я написал, требует, чтобы я предоставил параметр double [][], который переводится в UnsafeMutablePointer< UnsafeMutablePointer<Double>? > в быстром. Я написал небольшой фрагмент кода для преобразования в [[Double]].

let arrayToConvert = [[3.0, 4.0], [2.0, 3.3]]

let outerArray = UnsafeMutablePointer< UnsafeMutablePointer<Double> >.allocate(capacity: arrayToConvert.count)

for idx in 0..<dists.count {
    let arrPointer = UnsafeMutablePointer<Double>.allocate(capacity: dists[idx].count)
    arrPointer.initialize(from: arrayToConvert[idx], count: arrayToConvert[idx].count)

    outerArray.advanced(by: idx).pointee = arrPointer
}

. Затем я вызвал мою маленькую функцию cpp с именем opt(double **), используя созданный externalArray, но это не так. Это не работает, потому что outerArray не соответствует требованию маленькой функции, которую я написал, которая принимает UnsafeMutablePointer< UnsafeMutablePointer<Double>? > (обратите внимание на опциональную).

Поэтому я попытался изменить

let outerArray = UnsafeMutablePointer< UnsafeMutablePointer<Double> >.allocate(capacity: arrayToConvert.count)

на

let outerArray = UnsafeMutablePointer< UnsafeMutablePointer<Double>? >.allocate(capacity: arrayToConvert.count)

Здесь все становится странным. Когда я добавляю необязательный (?), Я получаю сообщение об ошибке «Неопределенный символ: _opt». Кто-нибудь может указать мне на то, что мне не хватает или что я здесь делаю неправильно?

Вот коды MWE:

main.swift

import Foundation

let arrayToConvert = [[3.0, 4.0], [2.0, 3.3]]

let outerArray = UnsafeMutablePointer< UnsafeMutablePointer<Double> >.allocate(capacity: arrayToConvert.count)

for idx in 0..<dists.count {
    let arrPointer = UnsafeMutablePointer<Double>.allocate(capacity: dists[idx].count)
    arrPointer.initialize(from: arrayToConvert[idx], count: arrayToConvert[idx].count)

    outerArray.advanced(by: idx).pointee = arrPointer
}

opt(outerArray)

cp.cpp

#include "cp.hpp"

template <size_t rows, size_t cols>
double opt(double (&array)[rows][cols]) {
    return 0.0;
}

cp.hpp

#ifndef cp_hpp
#define cp_hpp

#include <stdio.h>

#ifdef __cplusplus
extern "C" {
#endif

double opt(double **);

#ifdef __cplusplus
}
#endif

#endif

paper1-Bridging-Header.ч

#ifndef paper1_Bridging_Header_h
#define paper1_Bridging_Header_h

#include "paper1/cp/cp.hpp"

#endif
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...