自作ライブラリのエラー

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Rittai_3D
記事: 525
登録日時: 12年前

自作ライブラリのエラー

#1

投稿記事 by Rittai_3D » 11年前

こんにちは。3Dです。

今回は、自作ライブラリのエラーについて質問があります。

デバッグ用のライブラリを作ろうと思いまして、以下のようなコードを書きました。

( 呼び出し )
main.cpp

コード:

#include "DxLib.h"
#include "../Lib/main.h"

#pragma comment( lib, "./Lib/Lib_test01.lib" )

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
	ChangeWindowMode( TRUE ), DxLib_Init();
	MsgBox( "test" );
	WaitKey();
	DxLib_End();
	return 0;
}
( ライブラリ )
main.cpp

コード:

#include "../Lib/main.h"
#include <windows.h>

void MsgBox( const char* Str )
{
	MessageBox( NULL, TEXT( Str ), TEXT( "msg" ), MB_OK );
}

main.h

コード:

#ifndef DEF_MAIN_H
#define DEF_MAIN_H

void MsgBox( const char* Str );

#endif
としてみたところ、

コード:

------ ビルド開始: プロジェクト: Lib_test02, 構成: Debug Win32 ------
リンクしています...
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) は既に LIBCMTD.lib(typinfo.obj) で定義されています。
MSVCRTD.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) は既に LIBCMTD.lib(typinfo.obj) で定義されています。
LINK : warning LNK4098: defaultlib 'MSVCRTD' は他のライブラリの使用と競合しています。/NODEFAULTLIB:library を使用してください。
D:\prog\prot\Lib\Lib_test02\Debug\Lib_test02.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
ビルドログは "file://d:\prog\prot\Lib\Lib_test02\Debug\BuildLog.htm" に保存されました。
Lib_test02 - エラー 3、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
の様なエラーが出ました。ライブラリを作成・使用する事は初めてなので何がいけないのかさっぱり分かりません。
エラーを消して、MsgBox()を使用する為にはどの様にしたらよいでしょうか?

【開発環境】
Windows XP
Visual C++ 2008 Express Edition
(呼び出し側のみ)Dxライブラリ
初心者です

だんごさん
記事: 273
登録日時: 13年前

Re: 自作ライブラリのエラー

#2

投稿記事 by だんごさん » 11年前

コード:

#include "../Lib/main.h"
#pragma comment( lib, "./Lib/Lib_test01.lib" )
↑これを、↓こうしてみてはどうですか?

コード:

#pragma comment( lib, "./Lib/Lib_test01.lib" )
#include "../Lib/main.h"
当てずっぽうなのでまったく関係ないかもしれませんが…
 Dango San

naohiro19
記事: 256
登録日時: 14年前
住所: 愛知県

Re: 自作ライブラリのエラー

#3

投稿記事 by naohiro19 » 11年前

DXライブラリが「マルチスレッド(/MT)」「マルチスレッドデバッグ(/MTd)」でリンクするようになっているので自作ライブラリもそれに合わせて「マルチスレッド(/MT)」「マルチスレッドデバッグ(/MTd)」用の自作ライブラリでなければなりません。

Rittai_3D
記事: 525
登録日時: 12年前

Re: 自作ライブラリのエラー

#4

投稿記事 by Rittai_3D » 11年前

返信ありがとうございます。

解決しました!!
naohiro19 さんが書きました:DXライブラリが「マルチスレッド(/MT)」「マルチスレッドデバッグ(/MTd)」でリンクするようになっているので自作ライブラリもそれに合わせて「マルチスレッド(/MT)」「マルチスレッドデバッグ(/MTd)」用の自作ライブラリでなければなりません。
naohiro19のおっしゃった通りにマルチスレッドデバッグにしたところ、無事できました!!

また、
だんごさん さんが書きました:

コード:

#include "../Lib/main.h"
#pragma comment( lib, "./Lib/Lib_test01.lib" )
↑これを、↓こうしてみてはどうですか?

コード:

#pragma comment( lib, "./Lib/Lib_test01.lib" )
#include "../Lib/main.h"
当てずっぽうなのでまったく関係ないかもしれませんが…
だんごさんの方でも試しました。ちゃんとマルチスレッドデバッグにすると可能のようです。

これでライブラリ開発が捗ります。ありがとうございました。
初心者です

閉鎖

“C言語何でも質問掲示板” へ戻る