Ошибка C ++ при использовании dll MatLab: найден один или несколько кратно определенных символов

Я пытаюсь использовать функцию MatLab в C ++ с помощью MCR (MatLab Compiler Runtime).
Тем не менее, я получаю сообщение об ошибке при вызове функции из C ++.

Это вывод, когда я пытаюсь построить:

  1>------ Build started: Project: MatLab DLL Test 2, Configuration: Debug x64 ------

1>Compiling...

1>main.cpp

1>libfoo.cpp

1>Generating Code...

1>Linking...

1>libfoo.lib(libfoo.dll) : error LNK2005: "void __cdecl foo(int,class mwArray &,class mwArray const &)" (?foo@@YAXHAEAVmwArray@@AEBV1@@Z) already defined in libfoo.obj

1>libfoo.lib(libfoo.dll) : error LNK2005: "void __cdecl foo(int,class mwArray &,class mwArray const &)" (?foo@@YAXHAEAVmwArray@@AEBV1@@Z) already defined in libfoo.obj

1>C:\Users\fmarsman\Documents\Visual Studio 2008\Projects\Project1\MatLab DLL Test 2\x64\Debug\MatLab DLL Test 2.exe : fatal error LNK1169: one or more multiply defined symbols found

1>Build log was saved at "file://c:\Users\fmarsman\Documents\Visual Studio 2008\Projects\Project1\MatLab DLL Test 2\MatLab DLL Test 2\x64\Debug\BuildLog.htm"
1>MatLab DLL Test 2 - 3 error(s), 0 warning(s)

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Вот что я сделал:

  • Я создал .m файл foo.m:

    функция y = foo (x)

    у = х + 1;

  • В командной строке я выполнил:

    mcc –W cpplib: libfoo –T link: lib foo

  • Это создано libfoo.lib, libfoo.h, libfoo.dll а также libfoo.cpp

  • Затем я создал проект в MS Visual Studio 2008. Я добавил libfoo.cpp в «Исходные файлы» и libfoo.h в «Заголовочные файлы».
    Я добавил три каталога в Свойства конфигурации -> C / C ++ -> Общие -> Дополнительные каталоги включения:

C: \ Users \ fmarsman \ Documents \ MATLAB \ DLL Test 2 (папка, в которой находятся все файлы libfoo. *)

C: \ Program Files \ MATLAB \ MATLAB Runtime компилятора \ v82 \ extern \ lib \ win64 \ microsoft (для mclmcrrt.lib)

C: \ MATLAB \ R2013b \ ехЬегп \ включают (для mclmcrrt.h)

  • Для компоновщика -> Ввод -> Дополнительные зависимости, которые я добавил:

«C: \ Program Files \ MATLAB \ MATLAB Runtime Compiler Runtime \ v82 \ extern \ lib \ win64 \ microsoft \ mclmcrrt.lib» «C: \ Users \ fmarsman \ Documents \ MATLAB \ DLL Test 2 \ libfoo.lib»

Мой исходный код:

  #include <iostream>
#include <mclmcrrt.h>
#include <mclcppclass.h>
#include <libfoo.h>
using namespace std;

int main( ) {
mclInitializeApplication(NULL,0);
libfooInitialize( );

mwArray y(1, 1, mxDOUBLE_CLASS);
y = 3.0;
const mwArray x = y.Clone();

foo(1,y,x);

mclTerminateApplication( );
libfooTerminate( );

return 0;
} // main

Я пытался найти решение весь день, но безуспешно.
Я действительно надеюсь, что кто-то может помочь мне с этим.

0

Решение

Удалите файл libfoo.cpp из вашего проекта студии VS. Вы уже импортировали libfoo.dll, поэтому вы используете функцию «foo» из libfoo.dll, поэтому вам не нужно включать источник в ваш проект VS.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]