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

0

Я пытаюсь использовать функцию MatLab в C++, используя MCR (время исполнения компилятора MatLab). Тем не менее, я получаю сообщение об ошибке, когда вызываю функцию из 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)

    y = x + 1;

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

    mcc -W cpplib: libfoo -T ссылка: 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\extern\include (для mclmcrrt.h)

  • To Linker → Input → Additional Dependencies Я добавил:

"C:\Program Files\MATLAB\MATLAB 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

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

Теги:
dll
matlab-compiler
matlab-coder

1 ответ

1
Лучший ответ

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

  • 0
    Это сработало. Спасибо вам большое!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню