Ошибка командной строки D8003: отсутствует исходное имя файла при компоновке

Я использую Autotools для компиляции модулей Matlab. Первоначально мы использовали Libtool для достижения цели, но она действительно делает ужасную работу с компиляторами Microsoft. Таким образом, мы удаляем сборки Libtool для Windows.

Вот некоторая информация, которая может быть полезна:

$ cl /V
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.$ uname -a
CYGWIN_NT-6.1 RatTop 1.7.18(0.263/5/3) 2013-04-19 10:39 i686 Cygwin

К сожалению, у меня ошибка связи, которую я не могу объяснить:

CXXLD    AverageFilter.mexw32
cl  /DTRILIBRARY /DANSI_DECLARATORS /DNO_TIMER /D_HAVE_MATLAB_MODULES_ /D_GNU_SOURCE -O2 -DWIN32 -D_INTEL_WIN_ -EHsc /link /OUT:AverageFilter.mexw32 AverageFilter.obj /DLL /export:mexFunction /link /LIBPATH:"C:/root/extern/lib/win32/microsoft" libmx.lib libmex.lib libmat.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /INCREMENTAL:NO /manifest ./libISSMMatlab.a ../../c/libISSMModules.a ../../c/libISSMCore.a C:/root/home/Daeden/issm/trunk-jpl/externalpackages/petsc/install/lib/libpetsc.lib /link /LIBPATH:"C:/root/home/Daeden/issm/trunk-jpl/externalpackages/petsc/install/lib" libpetsc.lib /nologo
cl : Command line error D8003 : missing source filename
Makefile:860: recipe for target `AverageFilter.mexw32' failed

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

2

Решение

Компилятор Microsoft C / C ++ может передавать параметры компоновщику с помощью команды / link или с помощью команд, известных как Управляемые компилятором опции LINK.

Таким образом, опция ‘/ Fe’ эквивалентна ‘/ link / OUT:’. Это определенно решает проблему.

Кроме того, порядок флагов может решить проблему. Изменяя это:

/link /OUT:AverageFilter.mexw32 AverageFilter.obj

К этому:

AverageFilter.obj /link /OUT:AverageFilter.mexw32

Линкер вызывается правильно.

2

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

для моего конкретного случая, в
свойства проекта c ++ -> общие -> командная строка

у меня были варианты
/ I «$ (OutDir)» / I «..»

и я должен был изменить это в

/ Я «($ (OutDir))«/ Я» .. »

1

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