2

我正在使用 Autotools 编译 Matlab 模块。最初,我们使用 Libtool 来完成,但它在处理微软的编译器时确实做得很糟糕。因此,我们正在删除适用于 Windows 构建的 Libtool。

以下是一些可能有用的信息:

$ 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

谁能解释如何摆脱这个错误?如果我试图编译这将是有道理的,但我只是试图链接。

4

3 回答 3

4

刚刚在编译过程中遇到了这个错误。对我来说,这是因为编译器无法处理斜杠。

/external:I "$(WindowsSdkDir)"

扩大到

/external:I "C:\Program Files (x86)\Windows Kits\10\"

这触发了错误。附加一个点为我修复了它:

/external:I "$(WindowsSdkDir)."
于 2020-06-16T09:08:18.040 回答
2

Microsoft 的 C/C++ 编译器可以通过“/link”命令或称为Compiler-Controlled LINK Options的命令将选项传递给链接器。

因此,“/Fe”选项等同于“/link /OUT:”。这绝对可以解决问题。

或者,标志的顺序可以解决问题。通过改变这个:

/link /OUT:AverageFilter.mexw32 AverageFilter.obj

对此:

AverageFilter.obj /link /OUT:AverageFilter.mexw32

链接器被正确调用。

于 2013-05-21T20:50:56.503 回答
1

对于我的特殊情况,在 c++ 项目属性 ->常规 -> 命令行中

我有选项 /I "$(OutDir)" /I ".."

我不得不把它改成

/I " ( $(OutDir) ) " /I ".."

于 2015-06-17T11:41:58.830 回答