Apple Mach-O Linker (Id) Ошибка в Xcode 9.4.1 - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь использовать механизм MATLAB через C ++ в Xcode 9.4.1, но получаю ошибку: «Ошибка Apple Mach-O Linker (Id)».Я искал ответ и обнаружил, что отключение «Биткода» может помочь.Тем не менее, когда я иду к настройке сборки XCode, это просто не там.Подчеркиваю, что его точно нет, даже если вы ищете в строке поиска.Как я могу выключить это, и если я не могу, что я могу сделать?

Undefined symbols for architecture x86_64:
"_engEvalString", referenced from:
  _main in main.o
"_engOpen", referenced from:
  _main in main.o
"_engPutVariable", referenced from:
  _main in main.o
"_mxCreateDoubleMatrix_800", referenced from:
  _main in main.o
"_mxGetPr_800", referenced from:
  _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Вот полный код:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "engine.h"
#define  BUFSIZE 256

int main() {
    Engine *ep ;
    mxArray *Y = NULL, *result = NULL ;
    char buffer[BUFSIZE];
    double x[10] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,
        8.0, 9.0};
    if (!(ep = engOpen("\0"))) {
        fprintf(stderr, "\nCan't start MATLAB engine\n");
        return EXIT_FAILURE;
    }
    Y = mxCreateDoubleMatrix(1,10, mxREAL);
    memcpy((void *)mxGetPr(Y), (void *)x, sizeof(x));
    engPutVariable (ep, "Y", Y) ;
    engEvalString(ep, "fx = Y.^2") ;
    engEvalString(ep, "plot(Y,fx);");
    engEvalString(ep, "f(x) = y^2") ;
    engEvalString(ep, "xlabel('x');");
    engEvalString(ep, "ylabel('y');");

    printf("Hit return to continue\n\n");
    fgetc(stdin);
    return 0 ;
}

сообщение об ошибке

1 Ответ

0 голосов
/ 18 октября 2018

Согласно сообщению об ошибке и команде ссылки, показанной на снимке экрана, оно не связывается с библиотеками MATLAB.Я не знаю, как правильно настроить XCode для этого.

Лучшее, что вы можете сделать, это следовать советам в документации MATLAB , которая предлагает использовать команду mex вMATLAB выглядит следующим образом:

mex -v -client engine <filename.cpp>

Замените <filename.cpp> на фактическое имя исходного файла, конечно.Сначала измените каталог на местоположение этого исходного файла, и исполняемый файл будет расположен рядом с ним.

...