1

Я использую deploytool в Matlab последние несколько месяцев в своей 64-битной версии Matlab 2010b. Недавно я узнал, что мне нужно создать 32-битную версию моей общей библиотеки.Ошибки связи Matlab Compiler (64 бит против 32 бит)

Для этого я следую тем же методам, которые использовал ранее (в значительной степени вызываю команду mcc -W lib:MYLIB -T link:lib -d 'MYOUTPUTFOLDER' -v 'MFILE1' 'MFILE2') в своей версии Matlab 2009b 32. Я продолжаю получать ошибку LNK1811: не могу открыть входной файл LIBRARY.obj. Я попытался найти этот объектный файл LIBRARY, но я не могу найти его нигде.

До сих пор я проверял, чтобы были доступны все правильные библиотеки (найденные в $ MATLABROOT $ \ extern \ include \ win32), я убедился, что все мои пути верны в файле compopts.bat и Я использовал опцию -T compile: lib, которая отлично работает и создает dll. Это было бы здорово, но мне нужен файл lib, который будет использоваться позже в mbuild.

Мой текущий путь вперед состоит в том, чтобы взять compopts из моей 64-битной версии Matlab (на другой машине) и сравнить ее с моими компотами для 32-битного. Я опубликую, если это имеет значение.

+1

Вы пытались запустить 'mcc' из оболочки dos. Может быть принудительно для $ MATLABROOT $ \ bin \ win32 \ mcc.exe и для ожидаемого файла 'compopts.x32.bat' с опцией' -f'. При компиляции для обеих дуг с одного и того же компьютера, matlab перезаписывает один и тот же 'compopts.bat' (позволяя' mbuild -setup' создавать его для меня) ... поэтому я закончил тем, что все в моем развертывании скриптов ... _well здесь вы говорите, используя два отдельных machine_ :(... – CitizenInsane

+0

Я попытался запустить mcc из оболочки dos только сейчас, и он вернул те же ошибки. Я также попытался использовать мой подход выше и изменил некоторые из своих 32-битных компоновки на то, что они были на 64-битной земле который также не работал. Я не совсем понимаю ваше второе предложение о форсировании для $ MATLABROOT $ \ bin \ win32 \ mcc.exe и для ожидаемого файла 'compopts.x32.bat' с параметром -f, это то, что было бы был исправлен с запуском оболочки dos или мне нужно исправить файл mcc.exe? – Dingess

+1

На компиляции ПК у меня есть как x64, так и x32 версии matlab, поэтому в зависимости от того, какую арку я хочу построить, я либо заставляю скрипты указывать на '~ \ win32 \ mcc.exe' или '~ \ win64 \ mcc.exe'. Для файла' compopts.bat' я создал один wi th matlab x64 ('mbuild -setup' => переименован в' compopts.x64.bat') и один с matlab x32 ('mbuild -setup' => переименован в' compopts.x64.bat'). Затем я снова принудительно верю в командную строку mcc с опцией '-f' * (Если не указано, mcc.exe использует последний сгенерированный' compopts.bat' [а так как matlab x64/x32 сгенерирует этот файл на том же диске, он может быть неверный]) * – CitizenInsane

ответ

1

Подводя итоги нашим комментариям в вопросе и сделаем это ответом. Вот как мне удается создавать библиотеки x32 и x64/standalones с помощью mcc.

NB: Может быть, есть более элегантные решения для настройки deploytool, во всяком случае с грубой силой, я уверен, это работает, и я могу автоматизировать процесс глобального развертывания для своих приложений ...

установка машины

  1. установка Matlab x32 и x64 на машине
  2. Run Matlab x32 и настройка компилятора опции набрав msbuild -setup

    • Это создаст compopts.bat файл в ~user\AppData\Roaming\MathWorks\MATLAB\R2013b(путь может отличаться от версии)
    • Переименуйте этот файл в compopts.x32.bat(см позже)
  3. Run Matlab x64 и настройка параметры компилятора, набрав msbuild -setup

    • Это создаст compopts.bat файл в ~user\AppData\Roaming\MathWorks\MATLAB\R2013b(!! перезапись x32 !!)
    • Переименуйте этот файл в compopts.x64.bat(для обхода файлов перезапись)

EDITПросто испытанной ... В R2014b Matlab больше не перезаписывает тот же файл compots.bat ... теперь он генерирует два отдельных файла MBUILD_C++_win64.xml и MBUILD_C++_win32.xml (что хорошо!).

компиляции в x32

Force ваш сборник сценарий, чтобы указать на ~matlabx32\bin\win32\mcc.exe и силы mcc.exe использовать ранее сохраненный compopts.x32.bat файл, используя опцию -f. Ваша командная строка должна быть что-то вроде:

~matlabx32\bin\win32\mcc.exe -f "compopts.x32.bat" ... other mcc options ... 

компиляции в x64

Force ваш сборник сценарий, чтобы указать на ~matlabx64\bin\win64\mcc.exe и силы mcc.exe использовать ранее сохраненный compopts.x64.bat файл, используя опцию -f. Ваша командная строка должна выглядеть примерно так:

~matlabx64\bin\win64\mcc.exe -f "compopts.x64.bat" ... other mcc options ...