現在C言語のCPLEX APIを使用して線形プログラミングの問題を解決するMATLABにMEXファイルを作成しています。CPLEX APIを使用するMEXファイルのコンパイラエラー
残念ながら、コンパイルしようとすると「アーキテクチャx86_64のシンボルが見つかりません」という問題が発生しましたが、解決方法はわかりません。以下の(MATLAB)出力のコピーを添付しました。コンパイルには何が必要ですか?
また、のロット番号リンカー 'レジスタの割り当てに関連するコンパクトアンワインドを作成できませんでした'というエラーがあり、保存されています。私が80%を削除して読みやすくしていたので、これらは関連していますか?彼らは懸念の原因ですか?役に立つかもしれません
いくつかの他の情報:
- 私は、Mac OSX 10.7.2 に私はMATLABの2011Bを使用していますCPLEXのAPI
- を使用していないyprime.cと他のMEXファイルをコンパイルすることができます
- 私はXCode 4.2に含まれているGCC 4.2パッケージを使用しています。
- IはすでにここMATLAB
用XCodeの4.2パッチ(MATLAB)が出力される適用:
----------------------------------------------------------------
-> MATLAB = /Applications/MATLAB_R2011b.app
-> CC = llvm-gcc-4.2
-> CC flags:
CFLAGS = -fno-common -no-cpp-precomp -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -fexceptions
CDEBUGFLAGS = -g
COPTIMFLAGS = -O2 -DNDEBUG
CLIBS = -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
arguments = -DMX_COMPAT_32
-> CXX = llvm-g++-4.2
-> CXX flags:
CXXFLAGS = -fno-common -no-cpp-precomp -fexceptions -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5
CXXDEBUGFLAGS = -g
CXXOPTIMFLAGS = -O2 -DNDEBUG
CXXLIBS = -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
arguments = -DMX_COMPAT_32
-> FC = gfortran
-> FC flags:
FFLAGS = -fexceptions -m64 -fbackslash
FDEBUGFLAGS = -g
FOPTIMFLAGS = -O
FLIBS = -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -L -lgfortran -L -lgfortranbegin
arguments = -DMX_COMPAT_32
-> LD = llvm-gcc-4.2
-> Link flags:
LDFLAGS = -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map
LDDEBUGFLAGS = -g
LDOPTIMFLAGS = -O
LDEXTENSION = .mexmaci64
arguments = -L/Users/berk/Applications/IBM/ILOG/CPLEX_Studio_Academic123/cplex/lib/x86-64_darwin9_gcc4.0/static_pic -lilocplex -lcplex
-> LDCXX =
-> Link flags:
LDCXXFLAGS =
LDCXXDEBUGFLAGS =
LDCXXOPTIMFLAGS =
LDCXXEXTENSION =
arguments = -L/Users/berk/Applications/IBM/ILOG/CPLEX_Studio_Academic123/cplex/lib/x86-64_darwin9_gcc4.0/static_pic -lilocplex -lcplex
----------------------------------------------------------------
-> llvm-gcc-4.2 -c -I/Users/berk/Applications/IBM/ILOG/CPLEX_Studio_Academic123/cplex/include/ -I/Applications/MATLAB_R2011b.app/extern/include -I/Applications/MATLAB_R2011b.app/simulink/include -DMATLAB_MEX_FILE -fno-common -no-cpp-precomp -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -fexceptions -DMX_COMPAT_32 -g "addcutsmx.c"
-> llvm-gcc-4.2 -g -Wl,-twolevel_namespace -undefined error -arch x86_64 -Wl,-syslibroot,/Developer/SDKs/MacOSX10.6.sdk -mmacosx-version-min=10.5 -bundle -Wl,-exported_symbols_list,/Applications/MATLAB_R2011b.app/extern/lib/maci64/mexFunction.map -o "addcutsmx.mexmaci64" addcutsmx.o -L/Users/berk/Applications/IBM/ILOG/CPLEX_Studio_Academic123/cplex/lib/x86-64_darwin9_gcc4.0/static_pic -lilocplex -lcplex -L/Applications/MATLAB_R2011b.app/bin/maci64 -lmx -lmex -lmat -lstdc++
ld: warning: could not create compact unwind for _CPXLmsg: register 12 saved somewhere other that in frame
ld: warning: could not create compact unwind for _CPXsetbranchcallbackfunc: register saved more than once (might be shrink wrap)
Undefined symbols for architecture x86_64:
"_kCFAllocatorDefault", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_kIOMasterPortDefault", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_IOServiceMatching", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_IOServiceGetMatchingService", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"___CFStringMakeConstantString", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_IORegistryEntryCreateCFProperty", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_CFGetTypeID", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_CFStringGetTypeID", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_CFStringGetCString", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_CFDataGetTypeID", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_CFDataGetLength", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_CFDataGetBytePtr", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_CFRelease", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
"_IOObjectRelease", referenced from:
_ilm_fun_000 in libcplex.a(env.o)
_ilm_fun_121 in libcplex.a(env.o)
_ilm_api_004 in libcplex.a(env.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
mex: link of ' "addcutsmx.mexmaci64"' failed.
Error using mex (line 206)
Unable to complete successfully.
解決される問題:
将来の参照のために、警告メッセージでありますCPLEXを使用する際の問題ではありません。実際の問題は、XCode 4.2に含まれているCoreFoundationフレームワークとIOKitフレームワークで通常バンドルされている欠落したシンボルでした。通常は、-framework CoreFoundationと-framework IOKitフラグを使用してそれらを含めることができますが、MATLABのmexコマンドはこの機能をサポートしていません。幸いなことに、LDFLAGS = '\ $ LDFLAGS -framework CoreFoundation -framework IOKit'を使用して、リンクプロセスのカスタムベースのフラグを追加することができます。