2

Autotools を使用して Matlab モジュールをコンパイルしています。もともと、Libtool を使用して達成していましたが、Microsoft のコンパイラを扱うのは本当にひどい仕事です。そのため、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 に答える