命令行错误D8003:链接时缺少源文件名。

问题描述 投票:2回答:3

我正在使用Autotools来编译Matlab模块。最初,我们使用Libtool来完成,但它在处理微软的编译器时确实做得很糟糕。因此,我们将移除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

谁能解释一下如何消除这个错误? 如果我试图编译,那就有意义了,但我只是试图链接。

c++ visual-studio-2010 autotools
3个回答
2
投票

微软的CC++编译器可以通过 "链接 "命令或通过称为 "链接 "的命令将选项传递给链接器。编译器控制的LINK选项.

因此,'Fe'选项相当于'link OUT:'。这无疑解决了这个问题。

另外,标志的顺序也可以解决这个问题。通过改变这个。

/link /OUT:AverageFilter.mexw32 AverageFilter.obj

改成这个

AverageFilter.obj /link /OUT:AverageFilter.mexw32

链接器就会被正确调用


1
投票

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

我有选择I "$(OutDir)" I "."

我不得不把这个改成

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


0
投票

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

/external:I "$(WindowsSdkDir)"

扩展到

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

触发了这个错误。添加一个小点后,我就解决了这个问题。

/external:I "$(WindowsSdkDir)."
© www.soinside.com 2019 - 2024. All rights reserved.