• 締切済み

VC++でリンクエラー

開発環境:  Visual C++ 2008 WindowsXP SP2 以下のようなリンクエラーが出て困っています。 [エラーメッセージ] xxx.lib(xxx01.obj) : error LNK2001: 外部シンボル ""public: void __thiscall std::_String_base::_Xran(void)const " (?_Xran@_String_base@std@@QBEXXZ)" は未解決です。 [確認した点] C:\Program Files\Microsoft Visual Studio 9.0\VC\lib に「libcpmt.lib」というライブラリがあり、これをダンプすると  Xran@_String_base@std@@・・・ という箇所がありましたのでこのライブラリとのリンクをすれば良い かなと思います(release版のマルチスレッドであるため)。勿論このファオルダをライブラリディレクトリの一番上に指定しております(順番を変えて試したりもしました)。 [不可解な点(原因と関係があるかもしれない点)] (1)VCの2008以下のバージョンからプロジェクトを2008用に変換しています。元のバージョンが何なのかはわかりません。(知る方法はありますか?) どのような原因が考えられるでしょうか?

みんなの回答

回答No.3

(1)VCの2008以下のバージョンからプロジェクトを2008用に変換しています。元のバージョンが何なのかはわかりません。(知る方法はありますか?) の元のバージョンを知る方法について参考意見を述べさせていただきます。 もし、手に入れた直後のプロジェクトをまだお持ちでしたら、.slnというファイルをメモ帳などで開いて見てはいかがでしょうか? 私の環境ではVisual C++などで作成したプロジェクトはメモ帳で開くと 二行目辺りに開発に使用したVisualStudioのバージョンというか年式が 書いてありますので、参考までに回答させていただきました。

  • sinwxyz
  • ベストアンサー率0% (0/0)
回答No.2

参考URLが同じようなエラーに見えます. プロジェクト右クリック⇒プロパティ⇒リンカ⇒コマンドライン ⇒追加のオプション にXXX.libを追加したら良いだけでは?

参考URL:
http://miau.s9.xrea.com/blog/rsd.php?itemid=481
回答No.1

> VCの2008以下のバージョンからプロジェクトを2008用に変換しています。 ハナっから2008で起こしたやつならそのリンクエラーは発生しないのですか?

jimihenn
質問者

お礼

説明不足ですいません。 まさにそれを今やろうとしてますが、かなりてこずってます。

関連するQ&A

  • VC++でのリンクエラー [error LNK2005]

    VC++でMFCを使用してダイアログベースのEXEを 作成しています。 以下のクラスのメンバ関数などを使用して、色の操作をしています。 CDC::SetBkColor() CDC::SetTextColor() ビルド時、以下のリンクエラーとなりました。 ---------------------------------------------- nafxcw.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3@YAXPAX@Z) はすでに LIBCMT.lib(delete.obj) で 定義されています Release/MenueTest.exe : fatal error LNK1169: 1 つ 以上の複数回定義されているシンボルが見つかりました link.exe の実行エラー ---------------------------------------------- MFC と C(?)のライブラリで delete()関数が競合しているようですが、これを回避する方法をご存知の方、ご教授願います。 <環境> OS:Windows2000 VC++6.0 <備考> リンクエラーになるのは以下の組み合わせです。 「MFCをスタティックリンクする+リリース版」 MFCをスタティックリンクしてもデバッグ版のビルドだとエラーになりません。 また、MFCをスタティックリンクしない場合もエラーにはなりません。 ただし、リンクエラーにならなかった場合、どちらのオブジェクトの delete()関数が呼ばれるか不明で、それが正しいのかも心配です。

  • リリースモードの時にリンカエラーが発生します

    リリースモードの時にリンカエラーが発生します Visual Studioで、自作ライブラリを使ったプログラムの開発をしていたのですが、リリースモード時にリンカエラーが発生してしまいました。 デバッグモード時は特に問題なくリンクできるのですが、リリースモードでコンパイルをすると以下のようなエラーが発生します。 LibGame.lib(Game.obj) : error LNK2001: 外部シンボル ""bool __cdecl FileExists(class std::basic_string,class std::allocator >)" (?FileExists@@YA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)" は未解決です。 LibGame.lib(Mesh.obj) : error LNK2001: 外部シンボル ""public: struct ARCHIVE_ENTRY * __thiscall CArchive::Find(class std::basic_string,class std::allocator >)" (?Find@CArchive@@QAEPAUARCHIVE_ENTRY@@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z)" は未解決です。 LibGame.lib(Mesh.obj) : error LNK2001: 外部シンボル ""class std::basic_string,class std::allocator > __cdecl ExtractFilePath(class std::basic_string,class std::allocator >)" (?ExtractFilePath@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V12@@Z)" は未解決です。 Release/ShtGame.exe : fatal error LNK1120: 外部参照 3 が未解決です。 プロジェクトのプロパティ等でリンク先のライブラリを有無やヘッダをチェックしたのですが、原因がつかめませんでした。 どのようなエラー原因が考えられるでしょうか? よろしくお願いします OS:Windows XP SP3 言語:VC++ 開発環境:Visual Studio 2005 Academic Edition

  • VC++ 2010のエラーについて

    現在VC++ 2010を使ってソフトを作成しています。 BOOSTライブラリを用いているのですが、 ビルドを行おうとすると、 >LINK : fatal error LNK1104: ファイル 'libboost_thread-vc100-mt-sgd-1_43.lib' を開くことができません。 といったエラーが出てしまいます。 ちなみにboostはバージョン1_43を使用しています。 また、bjamを行い、boostはしっかりとビルドされております。 さらに、libboost_thread-vc100-mt-sgd-1_43.libが存在することは確認しており、 そのフォルダまでのパスもしっかり通しました。 どなたかご存知の方いらっしゃいましたら教えていただけると幸いです。

  • リンクエラーについて

    C++の初心者です。 C++で作成したプログラムがリンクでエラーになります。 エラーの内容は、”LNK2019:未解決のシンボル_IoInitが間数XXXXで 参照されました。”です。 IoInit関数を含むライブラリ(C:\JAVAC\ciolib.lib)をリンクする必要があり、リンカの/DEFAULTLIBオプションでライブラリを指定しましたが、状況は変わりません。 リンカの内容は、以下のとうりです。 cl -I:"C:\Program Files\Microsoft Visual Studio 8\VC\include" -I:C:\j2sdk1.4.2_18\include -I:C:\j2sdk1.4.2_18\include\win32 -LD -FeCiolibJNI.dll CiolibJNI.cpp /link -libpath:"C:\Program Files\Microsoft Visual Studio 8\VC\lib" /NODEFAULTLIB:C:\JAVAC\ciolib.lib /DEFAULTLIB:C:\JAVAC\ciolib.libの指定が悪いのか状況は変わりません。それとも、指定オプションが悪いのか困っています。 リンカが悪いのであれば、修正箇所を教えてください。

  • BCBで作成したDLLを、VC++で静的リンクさせる方法

    BCBで作成したDLLを、VC++で静的リンクさせる方法 Borland C++ Builderで作成したDLLを、VC++アプリケーションで利用できるように LIBファイルに変換したいのですが、上手くいきません。 下記の手順を踏みました。 1. BCBでDLL作成   「VC++スタイルのDLL」で作成、   「VCLを使う」「CLXを使う」「マルチスレッドを使う」はチェックせず 2. コマンドラインで「IMPDEF.exe」を使用して、dllからdefファイル作成   (IMPDEF.exeは、\Borland\CBuilder6\Binに格納されていた) 3. コマンドラインで「LINK.exe」「LIB.exe」を使用して、defからlibファイル作成   (LINK.exeとLIB.exeは、\Microsoft Visual Studio\VC98\Binに格納されていた) 4. VC++プロジェクトファイルを保存したフォルダに、DLLファイルとlibファイルをコピー 5. VC++の「プロジェクト」-「設定」-「リンク」-「オブジェクト/ライブラリモジュール」に   作成したlibファイルを追加 VC++プロジェクトをビルドすると、下記のエラーメッセージが表示されます。 ///////////////////////////////////////////////////////////////////////////////// dllread.obj : error LNK2001: 外部シンボル "__imp__(関数名)@0" は未解決です LIBC.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です Release/dllread.exe : fatal error LNK1120: 外部参照 2 が未解決です。 link.exe の実行エラー ///////////////////////////////////////////////////////////////////////////////// BCBとVC++のバージョンは、下記の通りです。 BCB Professional 6.0 VC++ 6.0 ちなみに、同じDLLを動的リンクで利用することは出来ました。 初心者の質問で申し訳ございませんが、解決策が分かる方がいらっしゃいましたら 教えていただけないでしょうか?

  • VC++2008でインポートライブラリのスタティックリンクの設定

    VC++2008でインポートライブラリのスタティックリンクの設定 従来のVC++6.0ではプロジェクトのビルド時にインポートライブラリをスタティックリンクさせる場合 「プロジェクト」メニューから「設定」項目を選択し、「プロジェクトの設定」ウィンドウを表示させて、 「リンク」タブをクリックして表示されるページの「オブジェクト/ライブラリモジュール」欄の先頭に、 MyDll.lib(例)とスペースを1つ入力していました。末尾のスペースはMyDll.libとkernel32.libを区切るために必要でした。 これをVC++2008で実現するためにはどの様にしたらいいのですか? VC++2008の「プロジェクト」メニューを探しても「プロジェクトの設定」ウィンドウがありません。

  • リンクされません

    こんにちは 今、VC6.0を使ってVTKについてプログラムをしております。 しかし、どうしてもわからないエラーがでています。 ------------------------------------------- vtkMyTorus3.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall vtkObject::PrintTrailer(class std::basic_ostream<char,struct std::char_traits<char> > &,class vtkIndent)" (?PrintTrailer@vtkObject@@UAEXAAV?$basic_ostream@D U?$char_traits@D@std@@@std@@VvtkIndent@@@Z) ------------------------------------------- このようなエラーが多発してましてビルドできません。 だれかご鞭撻おねがいします。

  • VC2008 expressで、リンクされるlibの一覧が知りたいです。

    VC2008 expressで、リンクされるlibの一覧が知りたいです。 何か方法は無いでしょうか? 知らないlibがリンクされようとして、エラーが起きてしまっていて困っています。

  • 複数のライブラリをリンクするときに構造体が衝突する

    C++,開発環境はVisual Studio Professional 2013です, ライブラリ1にxy座標の構造体 struct point { int x; int y; }; を定義しています. ライブラリ2にも全く同じ構造体を定義しています. ここで,あるプロジェクトからこれら2つのライブラリをリンクしようとしたら, error C2011: 'point' : 'struct' 型の再定義 というコンパイルエラーが出ます. ライブラリ1とライブラリ2にpoint構造体が記述された共通用のヘッダを参照させるという方法をとれば解決できるのでしょうが,この方法以外でこのエラーをなんとか回避する方法はないでしょうか. 構造体宣言は只の宣言であって実体をもたないため,中身が同じであればいくら記述が重複しても問題はないと聞いたことがあったので大丈夫だと思っていました. また,ライブラリ1とライブラリ2のpoint構造体の名前それぞれpoint1,point2にするなど違うものにするという方法でも回避できるのでしょうが,下記のメインコード内でコメントアウトされている部分のように,構造体の中身が全く同じなので互換性を持たせられるようにしたいのです. ちなみに,ライブラリ1,2はコンソールアプリケーション・空のプロジェクトで作成したあと,ソリューションのプロパティで「構成の種類」を「スタティックライブラリ(.lib)」にするという手順で作成しています. 以下,簡略コード ====ライブラリ1==== ----lib1.h---- #ifndef _H1_ #define _H1_ struct point { int x; int y; }; void print_lib1(struct point p); #endif ----lib1.cpp---- #include "lib1.h" #include <iostream> void print_lib1(struct point p) { std::cout << "lib1 : " << p.x << ", " << p.y << std::endl; } =====ライブラリ2====== ----lib2.h---- #ifndef _H2_ #define _H2_ struct point { int x; int y; }; void print_lib2(struct point p); #endif ----lib2.cpp---- #include "lib2.h" #include <iostream> void print_lib2(struct point p) { std::cout << "lib2 : " << p.x << ", " << p.y << std::endl; } ===メインコード=== ----main.cpp---- #include "../../lib1/lib1/lib1.h" #include "../../lib2/lib2/lib2.h" int main(void) { struct point val; val.x = 2; val.y = 3; print_lib1(val); //print_lib2(val); }

  • リンクエラーについて

    下記リンクエラーが解決できません。 解決方法を教えて頂きたく。 LNK2001: 外部シンボル ""protected: virtual void __thiscall クラスA::メソッドB(void)" (?メソッドB@クラスA@@MAEXXZ)" は未解決です。 よろしくお願い致します。