CLapack C++で疑似逆行列を用いた最小2乗法を実装できないエラーの解決方法

このQ&Aのポイント
  • CLapack C++で疑似逆行列を用いた最小2乗法を実装しようとしていますが、うまくいきません。
  • Win32 ApplicationでCLapackを組み込もうとすると、リンクエラーが発生します。
  • math.hをインクルードすると、さらにエラーが発生します。どなたかCLapackに詳しい方、解決方法を教えてください。
回答を見る
  • ベストアンサー

CLapack C++

現在、C言語の中で疑似逆行列を用いた最小2乗法によって データの処理を行いたいと考えています。 そのためにCLapackという線形演算ライブラリを visual studio 6.0に組み込みたいのですがうまくいきません。 研究で、ADボードやロボットマニピュレータを使うために  Win32 Application で自分でプログラムを書いています。 Win32 Console Application にCLapackを組み込む事は、 http://www.alab.t.u-tokyo.ac.jp/~bond/doc/clapack.html​ を見てうまくいったのですが、Win32 Applicationで組み込もうとすると、以下のようなエラーがでます。 リンク中... LINK : warning LNK4049: ローカル定義のシンボル "_free" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_fprintf" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "__iob" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_malloc" がインポートされました LINK : warning LNK4049: ローカル定義のシンボル "_exit" がインポートされました clapack.lib(dlamch.obj) : error LNK2001: 外部シンボル "__imp__printf" は未解決です clapack.lib(xerbla.obj) : error LNK2001: 外部シンボル "__imp__printf" は未解決です Debug/test.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー プログラムに関する知識が乏しいため、解決できません。 またmath.hをインクルードすると大量のエラーがでます。 CLapackについて詳しい方がいらっしゃいましたら、 どうか教えていただけないでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんにちは. 私はWindows上ではコンソールで少しCLAPACKを触った程度なのですが…アドバイスを. おそらく,上記のエラーはCLAPACKの問題ではありません. 「WindowsのGUIプログラムで標準I/Oが使えるか?」という問題になってくると思います. 理由はエラーの内容が「Linkエラー」だからです. コンソールプログラムを「コンパイルして」実行ファイルを作るときに, 「printf()」というあなたが書いていない関数の機能が使えるのは, あなたのプログラムを「コンパイルして」半分機械語にした後に, printf()の入った半分機械語のファイルが結合されるからです. この過程を「リンク(link)」といいます. このように,「みんなが使う機能」をまとめておいて,後でリンクするものをライブラリなどと言ったりします. ここで,printf()はC言語の「標準ライブラリ」の標準I/O関数の一つです. コンソールアプリケーションでは 「実行ファイルを作るためには最後に標準ライブラリをリンクせよ」という設定になっているから, 無事に実行ファイルが作られるのでしょう. ですが,通常のGUIプログラムではprintf()などは使わないでしょう, だから,初期設定では標準ライブラリをリンクする設定にはなっていないと思われます. 結果,実行ファイルを作るときにこれがリンクされずに, 「要求された関数が何処にも無かった!(未解決)」とLinkエラーが出るわけです. ただし,ライブラリのリンクの問題だけか,というとそうでもないです. GUIのプログラムでprintf()としたときに出力が何処に飛んで行くか, と言われると一寸分からないので,一旦閉じて再度他の形で質問されたらどうでしょうか.

yaboo-bb
質問者

お礼

詳しいご説明ありがとうございます!! いろいろ考えた結果、 結局、GUIのプログラムでCLAPACKを使うのは大変そうなので、 自力で疑似逆行列を求めるプログラムを書いてみることに決めました。 マニアックな質問に丁寧に答えて頂いたのに、申し訳ありません。 ただechoes_x86の回答のおかげで自分でプログラムを書いてみよう と選択肢にたどり着くことができました。 そして、パラメータの推定は何とかなりそうです。 echoes_x86さんにはほんとに感謝しています。 ありがとうございます!!

その他の回答 (1)

回答No.1

おはようございます. CLAPACKのエラーというよりは 「Win32のGUIに標準入出力ライブラリを組み込もうとした」為のエラーという気がします. CLAPACKは処理がコケると標準出力にエラーを出してくれるのですが, ここで要求される関数がリンク時に未解決であるという意味に読めます. GUIアプリケーションを作るなら普通はprintfなどとせずに, メッセージボックスを作りますよね? だから初期設定ではこうしたものはリンクされないようになっているのでは? 余談ですが… 擬似逆行列を陽に計算するのは無駄なのではないですか? dgels_ を使った方が良いのでは?

yaboo-bb
質問者

補足

早速の回答ありがとうございます。 たしかに私のプログラムでは、ダイアログボックスで、 MessageBoxやGetDlgItemなど関数を使っています。 このような場合にCLapackを使うことは難しいのでしょうか? また >擬似逆行列を陽に計算するのは無駄なのではないですか? >dgels_ を使った方が良いのでは? についてですが、僕の言葉足らずですいません。 CLapackを組み込めたら、疑似逆行列は使わずにdgels_という関数を使うつもりです。最小2乗法によってパラメータが推定出来ればどんな方法でも大丈夫です。

関連するQ&A

  • C++でのエラー LNK2001

    C++でプログラミング中ビルドしたところ以下のようなエラーが出ました。解決方法がわかりません。どのようにしたら解決できるのでしょうか? ---------------------------------------------------------------- コンパイル中... sample01.cpp リンク中... sample01.obj : error LNK2001: 外部シンボル "__imp__dispose_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_copyright_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_version_information" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__initialize_library" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__close_reader_writer" は未解決です sample01.obj : error LNK2001: 外部シンボル "__imp__get_last_error_types" は未解決です Debug/Sample01.exe : fatal error LNK1120: 外部参照 6 が未解決です。 link.exe の実行エラー

  • OpenNIの動作について

    OpenNIをvisual studio2008で動作させようとしています。 そこで以下のメッセージが出て動作しません。インクルードファイルのリンクはしたつもりなのですが、参照できていないのでしょうか。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceCreateStream" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniFrameRelease" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceIsPropertySupported" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamGetSensorInfo" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceClose" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniShutdown" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniGetExtendedError" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniWaitForAnyStream" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniInitialize" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamStart" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceGetInfo" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamIsPropertySupported" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceOpen" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceGetSensorInfo" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamDestroy" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamStop" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniStreamReadFrame" は未解決です。 1>main.obj : error LNK2001: 外部シンボル "__imp__oniDeviceIsCommandSupported" は未解決です。 1>C:\Users\sakata\Documents\Visual Studio 2008\Projects\openNI_test\Release\openNI_test.exe : fatal error LNK1120: 外部参照 18 が未解決です。 以上です。 追加のインクルードディレクトリには C:\Program Files\OpenNI2\Include\Win32 C:\Program Files\OpenNI2\Include 追加のライブラリディレクトリには "C:\Program Files\OpenNI2\Lib" を追加しました。 環境変数はOpenNIをインストールしたときに勝手に追加されたので間違っていないと思います。 環境は以下です。 OS:Windows7 32bit OpenNIはOpenNI2を入れています。(2013年6月現在で最新?) もちろん32bit版です。 動作カメラはXtionです。ドライバインストール済みで、サンプルプログラムの.exeファイルでの動作は確認しています。 他の質問でx64でビルドすれば通るなどと書いてありますが、それは64bit版OSの話ですよね? 原因わかる方、回答お願いします。

  • Visual C++ 2005 Express EditionでLINK2019エラー

    Visual C++ 2003.netからVisual C++ 2005 Express Editionに移行した際に、以前書いたプログラムがリンクエラーで動かなくなってしまいました。 追加するLibディレクトリが足りないのかと思ったのですが、何が足りないのか見つけることができませんでした。 解決法を教えていただけないでしょうか。 OSはWindows XPです。 よろしくお願いします。 エラーメッセージの内容↓ ------------------------------- error LNK2019: 未解決の外部シンボル __imp__GetWindowPlacement@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__DispatchMessageA@4 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__TranslateMessage@4 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__PeekMessageA@20 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__ValidateRect@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__ShowWindow@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__SetWindowPos@28 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__GetWindowRect@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__GetClientRect@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__CreateWindowExA@48 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__GetSystemMetrics@4 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__RegisterClassExA@4 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__LoadCursorA@8 が関数 _WinMain@16 で参照されました。 error LNK2019: 未解決の外部シンボル __imp__DefWindowProcA@16 が関数 "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 error LNK2019: 未解決の外部シンボル __imp__PostQuitMessage@4 が関数 "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z) で参照されました。 現在追加されているLibディレクトリ↓ ------------------------------------------- $(VCInstallDir)lib $(VCInstallDir)PlatformSDK\lib $(FrameworkSDKDir)lib $(VSInstallDir) $(VSInstallDir)lib C:\Program Files\Microsoft Platform SDK\Lib C:\Program Files\Microsoft DirectX SDK (April 2007)\Lib\x86

  • DLL呼び出しAPのリンクエラーについて

    DLL作成初心者です。 当方で簡単なDLLを作成しました。 試しに、下記の呼び出しAP(EXE)を作成しようと したのですが、リンクエラーになります。 どうしてでしょうか? 呼び出しAP #include <windows.h> int main(){ static HINSTANCE hDLL; hDLL = LoadLibrary(TEXT("DLL_TEST.DLL")); if (hDLL) FreeLibrary(hDLL); return 0; } リンクエラーは下記 IBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Debug/TEST.exe : fatal error LNK1120: 外部参照 1 が未解決です また上記"_WinMain@16"のライブラリーをリンクさせると SCRNSAVE.LIB(scrnsave.obj) : error LNK2005: _main はすでに test.obj で定義されています SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverProc@16" は未解決です SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_ScreenSaverConfigureDialog@16" は未解決です SCRNSAVE.LIB(scrnsave.obj) : error LNK2001: 外部シンボル "_RegisterDialogClasses@4" は未解決です Debug/TEST.exe : fatal error 等のエラーになります。 解決策を教えてください。

  • DXライブラリ3D導入方法

    Visual C++ 2008使用 DXライブラリ3D導入時に下記のビルドエラーが発生します。 --------------------------------------------------------------- リンクしています... DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_CLSID_DirectMusicPerformance" は未解決です。 DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_IID_IDirectMusicPerformance8" は未解決です。 DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_CLSID_DirectMusicLoader" は未解決です。 DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_IID_IDirectMusicLoader8" は未解決です。 DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_CLSID_DirectMusicSegment" は未解決です。 DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_IID_IDirectMusicSegment8" は未解決です。 DxLibAd.lib(mL_Sound.obj) : error LNK2001: 外部シンボル "_GUID_StandardMIDIFile" は未解決です。 LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 C:\Documents and Settings\ABC\デスクトップ\test\Debug\test.exe : fatal error LNK1120: 外部参照 8 が未解決です。 ---------------------------------------------------------------- 下記URLに同様の問題に関する質問が投稿されていたのですがVS2005のようですので解決できませんでした。 またリンクが正しくない、といった内容の記述を見かけたのですがリンクの方法がわかりません。 解答お願いします。 参考にさせていただいたサイト http://fatalita.sakura.ne.jp/3DLib/Install/LIB/index.html http://fatalita.sakura.ne.jp/CGI/3DLib2/read.cgi?no=11

  • HTMLファイルのソースを読み出すプログラム

    HTMLファイルのソースを読み出すプログラムで実行したところ、以下↓のようなエラーが出ました。 readhrml.obj : error LNK2001: 外部シンボル "__imp__InternetReadFile@16" は未解決です readhrml.obj : error LNK2001: 外部シンボル "__imp__InternetCloseHandle@4" は未解決です readhrml.obj : error LNK2001: 外部シンボル "__imp__InternetOpenUrlA@24" は未解決です readhrml.obj : error LNK2001: 外部シンボル "__imp__InternetOpenA@20" は未解決です Debug/readhrml.exe : fatal error LNK1120: 外部参照 4 が未解決です。 一応、参考書と照らし合わせてみたのですが、プログラム自体には誤りがないとは思います。このエラーの原因は何か、そしてプログラムを実行するにはどのようにすればいいのか教えてください。C言語の勉強をしているんですが、C言語の知識はそんなにありませんので、なるべく専門用語などは砕いたような形で表現していただければ幸いです。どうかお願いします。

  • 「外部シンボル "_DirectDrawCreate@12" は未解決」って???

    外国のサイトで拾ってきたVisual C++のソースコードをコンパイルしたら 次のようなエラーが出ました。 --------------------------------- (1) test.obj : error LNK2001: 外部シンボル "_DirectDrawCreate@12" は未解決です (2) nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__endthreadex" は未解決です (3) nafxcwd.lib(thrdcore.obj) : error LNK2001: 外部シンボル "__beginthreadex" は未解決です (4) Debug/prog.exe : fatal error LNK1120: 外部参照 3 が未解決です。 (5) link.exe の実行エラー --------------------------------- 特に、(1)~(3) の意味がよく分かりません。 Readmeを見ると、「コンパイルすればいい」としか書いてないのですが、、、 もし原因がわかったらお願いします。

  • VC6.0でエラー

    環境:winNT4.0,vc6.0 コンソールアプリケーション作成でデバックモードではエラー、警告は、出ないのですが リリースモードで下記のようなエラーがでます。 エラーを消すにはどうしたらよいのでしょうか? 宜しくお願いします。 --------------------構成: muktc - Win32 Release-------------------- リンク中... muktc.obj : error LNK2001: 外部シンボル "_WSACleanup@0" は未解決です muktc.obj : error LNK2001: 外部シンボル "_WSAStartup@8" は未解決です muktc.obj : error LNK2001: 外部シンボル "_WSAGetLastError@0" は未解決です muktc.obj : error LNK2001: 外部シンボル "_gethostname@8" は未解決です muktc.obj : error LNK2001: 外部シンボル "_NetRemoteTOD@8" は未解決です Release/muktc.exe : fatal error LNK1120: 外部参照 5 が未解決です。 link.exe の実行エラー muktc.exe - エラー 6、警告 0

  • C++STLについての質問です。

    C++STLについての質問です。 Visual C++ 2008 Express Edition を使用してDirectXアプリケーションを 作成しています。 その折、std::listテンプレートを使用する機会があったのですが、このリストを 使用しますと、 リンクしています... LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。 libcpmtd.lib(stdthrow.obj) : error LNK2019: 未解決の外部シンボル __CrtDbgReportW が関数 "void __cdecl std::_Debug_message(wchar_t const *,wchar_t const *,unsigned int)" (?_Debug_message@std@@YAXPB_W0I@Z) で参照されました。 libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __malloc_dbg が関数 "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 libcpmtd.lib(xdebug.obj) : error LNK2019: 未解決の外部シンボル __free_dbg が関数 "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z) で参照されました。 fatal error LNK1120: 外部参照 3 が未解決です。 とのエラーが吐かれます。 ネットで検索すると、ソリューション構成をDebugからReleaseにすれば良いとの記述が ありましたので、実行してみました。しかし、 リンクしています... error LNK2001: 外部シンボル "_D3DXCreateTextureFromFileExW@56" は未解決です。 error LNK2001: 外部シンボル "_D3DXCreateSprite@8" は未解決です。 error LNK2001: 外部シンボル "_D3DXGetImageInfoFromFileW@8" は未解決です。 error LNK2001: 外部シンボル "_Direct3DCreate9@4" は未解決です。 fatal error LNK1120: 外部参照 4 が未解決です とのエラーが吐かれてしまいました。 尚、コード生成モードは、マルチスレッド(/MT)で作成しています。 どなたか、この問題を解決する方法をご存知ないでしょうか? よろしくお願いします。

  • ビルドエラー

    現在wrapi(http://sysnet.ucsd.edu/pawn/wrapi/download.html)を使いサンプルプログラムWrapiTest.cpp をVC++6.0で実行を試みています。しかしコンパイルは通るのですビルドがうまくいきません。 ビルドしようとすると以下のエラーが出力しました。 リンク中... WrapiTest.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) long __cdecl WRAPIGetPacketStats(struct DOT_11_STATS *)" (__imp_?WRAPIGetPacketStats@@YAJPAUDOT_11_STATS@@@Z)" は未解決です WrapiTest.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) long __cdecl WRAPIGetAssociatedAP(unsigned char * const)" (__imp_?WRAPIGetAssociatedAP@@YAJQAE@Z)" は未解決です WrapiTest.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) long __cdecl WRAPIGetRTSThreshold(unsigned long *)" (__imp_?WRAPIGetRTSThreshold@@YAJPAK@Z)" は未解決です WrapiTest.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) long __cdecl WRAPISetSSId(unsigned char *,unsigned long &)" (__imp_?WRAPISetSSId@@YAJPAEAAK@Z)" は未解決です WrapiTest.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) long __cdecl WRAPIGetSSId(unsigned char *)" (__imp_?WRAPIGetSSId@@YAJPAE@Z)" は未解決です WrapiTest.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) long __cdecl WRAPIOpenNdisDevice(unsigned short *)" (__imp_?WRAPIOpenNdisDevice@@YAJPAG@Z)" は未解決です (省略) Debug/WrapiTest.exe : fatal error LNK1120: 外部参照 7 が未解決です。 何が原因なのか教えていただけないでしょうか。 よろしくお願いします。

専門家に質問してみよう