Windows 7、Matlab R2011a (32 ビット)、および Open Watcom バージョン 1.8 を使用して、Fortran コードを呼び出す C MEX ファイルをコンパイルしようとしています。
Matlab の Web サイト (サポート リンク) に投稿された指示に従って、次のコマンドを使用して Fortran オブジェクト ファイルをコンパイルしました。
wfl386 -c -fpi87 -SC getqpf.f
次に、オブジェクト ファイルをいくつかの C ファイルにリンクしようとしました。C ファイルはすべて正しくコンパイルされますが、次のリンク エラーが表示されます。未定義の参照は、 のサブルーチンから呼び出される C ファイル内の関数に対するものですgetqpf.f
。たとえば、QESTM
は C ファイルの 1 つで関数として として定義されていますint qestm_()
。
このq_estimate.c
ファイルには、MEX プログラムのエントリ ポイント関数が含まれています。アイデアは、エントリ ポイント関数が のサブルーチンを呼び出すことgetqpf.f
です。のサブルーチンはgetqpf.f
、他のファイルの C コード関数を呼び出します。
未定義の参照を取り除くにはどうすればよいですか?
>> mex q_estimate.c paul2.c paul2_L1.c paul6.c paul6_L1.c runavg.c fit_slope.c getqpf.obj
Open Watcom Linker Version 1.8
Portions Copyright (c) 1985-2002 Sybase, Inc. All Rights Reserved.
Source code is available under the Sybase Open Watcom Public License.
See http://www.openwatcom.org/ for details.
loading object files
searching libraries
Error! E2028: QESTM is an undefined reference
Error! E2028: QESTM1 is an undefined reference
Error! E2028: QESTF is an undefined reference
Error! E2028: QESTF1 is an undefined reference
creating a Windows NT dynamic link library
file getqpf.obj(E:\DEVELOPMENT-FINAL\EXPERIMENTS\test-Q-analysis\getqpf.f): undefined symbol QESTM
file getqpf.obj(E:\DEVELOPMENT-FINAL\EXPERIMENTS\test-Q-analysis\getqpf.f): undefined symbol QESTM1
file getqpf.obj(E:\DEVELOPMENT-FINAL\EXPERIMENTS\test-Q-analysis\getqpf.f): undefined symbol QESTF
file getqpf.obj(E:\DEVELOPMENT-FINAL\EXPERIMENTS\test-Q-analysis\getqpf.f): undefined symbol QESTF1
C:\PROGRA~2\MATLAB\R2011A~1\BIN\MEX.PL: Error: Link of 'q_estimate.mexw32' failed.