質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

6755閲覧

Bullet LINK2019エラーが出る

robomoco

総合スコア31

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2019/02/25 03:39

物理エンジンBulletとゲームエンジンDXライブラリを使ったプログラムで下記のエラーが発生しました。原因が分からないので教えてください。
プロジェクトプロパティの追加のインクルードディレクトリに,C:\DxLib_VC\プロジェクトに追加すべきファイル_VC用とc:\BULLET\srcを入れ,
リンカ→全般の追加のライブラリディレクトリにC:\BULLET\binとC:\DXLib_VC\プロジェクトに追加すべきファイル_VC用を入れ,
リンカ→入力に以下の.libファイルを入れました。
Bullet3Collision_vs2010_debug.lib
BulletCollision_vs2010_debug.lib
Bullet3Collision_vs2010.lib
BulletCollision_vs2010.lib
BulletDynamics_vs2010_debug.lib
Bullet3Dynamics_vs2010_debug.lib
Bullet3Dynamics_vs2010.lib
BulletDynamics_vs2010.lib
LinearMath_vs2010_debug.lib
LinearMath_vs2010.lib
Bullet2FileLoader_vs2010_debug.lib
BulletSoftBody_vs2010_debug.lib
BulletSoftBody_vs2010.lib

1>------ ビルド開始: プロジェクト: prac3, 構成: Debug Win32 ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(391,5): warning MSB8028: 中間ディレクトリ (Debug) に別のプロジェクト (prac1.vcxproj, prac2.vcxproj, sample.vcxproj) と共有されているファイルが含まれています。これにより、クリーンしてリビルド動作が適切に行われない可能性があります。
1>DrawSomething.cpp
1>DrawSomething.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall btStaticPlaneShape::btStaticPlaneShape(class btVector3 const &,float)" (??0btStaticPlaneShape@@QAE@ABVbtVector3@@M@Z) が関数 _WinMain@16 で参照されました。
1>C:\Users\Ken\Documents\DXLibrary\sample - コピー\Debug\prac3.exe : fatal error LNK1120: 1 件の未解決の外部参照
1>プロジェクト "prac2 - コピー.vcxproj" のビルドが終了しました -- 失敗。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

コード #include <DxLib.h> #include <stdio.h> #include "btBulletCollisionCommon.h" #include "btBulletDynamicsCommon.h" //右手→左手位置変換 VECTOR btVGet(const btVector3 &inv) { return VGet(inv.getX(), inv.getY(), -inv.getZ()); } //右手→左手回転変換 VECTOR btRotVGet(const btVector3 &inv) { return VGet(-inv.getX(), -inv.getY(), inv.getZ()); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //モデルハンドル int Model_Handle; //カメラポジション VECTOR CameraPos; // ウインドウモードで起動 ChangeWindowMode(TRUE); // DXライブラリの初期化 if (DxLib_Init() < 0) { // エラーが発生したら直ちに終了 return -1; } // 画面モードの変更 SetGraphMode(1024, 768, 32); // 剛体メッシュモデルを読み込む Model_Handle = MV1LoadModel("dice.mv1"); // カメラの座標を初期化 CameraPos.x = 0.0f; CameraPos.y = 5.0f; CameraPos.z = -20.0f; //モデル構造体 struct MODEL_DICE { VECTOR pos; }; // モデル情報の実体宣言 MODEL_DICE mdl; mdl.pos.x = 0.0f; mdl.pos.y = 20.0f; mdl.pos.z = 0.0f; // ワールドの広さ btVector3 worldAabbMin(-10000, -10000, -10000); btVector3 worldAabbMax(10000, 10000, 10000); // プロキシの最大数(衝突物体のようなもの) int maxProxies = 1024; // broadphaseの作成(SAP法) btAxisSweep3* broadphase = new btAxisSweep3(worldAabbMin, worldAabbMax, maxProxies); // デフォルトの衝突設定とディスパッチャの作成 btDefaultCollisionConfiguration* collisionConfiguration = new btDefaultCollisionConfiguration(); btCollisionDispatcher* dispatcher = new btCollisionDispatcher(collisionConfiguration); // 衝突解決ソルバ btSequentialImpulseConstraintSolver* solver = new btSequentialImpulseConstraintSolver; // 離散動的世界の作成 btDiscreteDynamicsWorld* dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration); // 重力の設定 dynamicsWorld->setGravity(btVector3(0, -10, 0)); // 地面の衝突形状の作成 btCollisionShape* groundShape = new btStaticPlaneShape(btVector3(0, 1, 0), 1); // 地面のMotionStateの設定 btDefaultMotionState* groundMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(0, -1, 0))); // 地面の初期情報を設定 btRigidBody::btRigidBodyConstructionInfo groundRigidBodyCI(0, groundMotionState, groundShape, btVector3(0, 0, 0)); // 地面の剛体の作成 btRigidBody* groundRigidBody = new btRigidBody(groundRigidBodyCI); // ワールドに地面の剛体を追加 dynamicsWorld->addRigidBody(groundRigidBody); // 落下する箱の衝突形状の作成 btCollisionShape* fallShape = new btBoxShape(btVector3(1.0f, 1.0f, 1.0f)); // 箱のMotionStateの設定 btDefaultMotionState* fallMotionState = new btDefaultMotionState(btTransform(btQuaternion(0, 0, 0, 1), btVector3(mdl.pos.x, mdl.pos.y, mdl.pos.z))); // 質量、慣性の初期化 btScalar mass = 1; btVector3 fallInertia(0, 0, 0); fallShape->calculateLocalInertia(mass, fallInertia); // 箱の初期情報を設定 btRigidBody::btRigidBodyConstructionInfo fallRigidBodyCI(mass, fallMotionState, fallShape, fallInertia); // 箱の剛体の作成 btRigidBody* fallRigidBody = new btRigidBody(fallRigidBodyCI); // ワールドに箱の剛体を追加 dynamicsWorld->addRigidBody(fallRigidBody); // 描画先を裏画面にする SetDrawScreen(DX_SCREEN_BACK); //クリップ距離 SetCameraNearFar(1.0f, 1000.0f); // カメラの位置と注視点をセット SetCameraPositionAndTarget_UpVecY(CameraPos, VGet(0.0f, 10.0f, 0.0f)); // ESCキーが押されるまでループ while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) { // 画面を初期化 ClearDrawScreen(); // シミュレーションを進める。間隔は60Hz dynamicsWorld->stepSimulation(1 / 60.f, 10); // 箱の位置姿勢情報の取得 btTransform trans; fallRigidBody->getMotionState()->getWorldTransform(trans); // 位置取得 mdl.pos = btVGet(trans.getOrigin()); //個別取得例 //mdl.pos.x=trans.getOrigin().getX(); MV1SetPosition(Model_Handle, mdl.pos); // 角度取得 btMatrix3x3 rot = trans.getBasis(); btVector3 euler; rot.getEulerZYX(euler[2], euler[1], euler[0]); MV1SetRotationXYZ(Model_Handle, btRotVGet(euler)); // モデルを描画 MV1DrawModel(Model_Handle); // 裏画面の内容を表画面に反映させる ScreenFlip(); } // 読み込んだモデルの削除 MV1DeleteModel(Model_Handle); // 箱の剛体を削除 dynamicsWorld->removeRigidBody(fallRigidBody); delete fallRigidBody->getMotionState(); delete fallRigidBody; // 地面の剛体を削除 dynamicsWorld->removeRigidBody(groundRigidBody); delete groundRigidBody->getMotionState(); delete groundRigidBody; // 箱の衝突形状を削除 delete fallShape; // 地面の衝突形状を削除 delete groundShape; // ワールド・ソルバ・その他もろもろの削除 delete dynamicsWorld; delete solver; delete collisionConfiguration; delete dispatcher; delete broadphase; // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Bullet に関しては“オープンソースの物理演算エンジン”くらいの認識でしかなかったのですが、ちょっと検索してこちらを見つけました。
すごく分かり易かったので、ダウンロードしてライブラリーを作成してみました。そのページの "build_visual_studio.bat" を使用してソリューションを作成し、ビルドしました。
とりあえずデバッグバージョンのみですが、質問のソースをビルドして実行も出来ました。ライブラリーはよく分らなかったので、すべての .lib を追加しました(もちろん *_vs2010_debug.lib だけですよ)。そのままではリンクでエラーが出るので、プロジェクトのプロパティで、C/C++ のコード生成を“マルチスレッド デバッグ (/MTd)”に変更しました。その他は特に触ってません。

ライブラリーの作成に失敗している可能性もあるので、もう一度見直してみてはいかがでしょうか。

投稿2019/02/28 02:55

Bull

総合スコア986

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

robomoco

2019/02/28 14:05

ご回答ありがとうございます。 BullさんのBulletのバージョンは2.86.1ですか? 私はバージョン2.88を使ってました。試しに2.86.1でやってみると,何の問題もなくプログラムを動かすことができました。 バージョン2.88は"build_visual_studio.bat"が無く,代わりに, build_visual_studio_vr_pybullet_double_cmake.bat build_visual_studio_without_pybullet_vr.bat build_visual_studio_vr_pybullet_double.bat の3つのバッチファイルがあります。私は,一番下のbuild_visual_studio_vr_pybullet_double.batをダブルクリックしてソリューションを作成しました。これが影響しているのかもしれません。
Bull

2019/02/28 14:30

バージョンは 2.88 です。 私は参考にしたサイトの "build_visual_studio.bat" をコピーして使用しまたした。
robomoco

2019/02/28 14:46

バッチ処理の違いに何らかの問題があったのかもしれないですね
guest

0

自己解決

ゲームエンジンDXライブラリ(ver3.20a)とBullet Physics (ver2.88)は相性が*悪い可能性がある。
Bullet Physics(ver2.86.1)だと上手くいく。

あと,VSのプロジェクトのプロパティ設定は以下のように行う。

<構成:すべての構成>
構成プロパティー全般ー文字セット:マルチバイト文字セットを使用する
C/C++ー全般ー追加のインクルードディレクトリ:C:\DxLib_VC\プロジェクトに追加すべきファイル_VC用とC:\bullet3-2.86.1\src
リンカ―ー全般ー追加のライブラリディレクトリ:C:\DxLib_VC\プロジェクトに追加すべきファイル_VC用とC:\bullet3-2.86.1\bin

<構成:Debug>
C/C++-コード生成ーランタイムライブラリ:マルチスレッドデバッグ(/MTd)
リンカ―ー入力ー追加の依存ファイルー必要な*_vs2010_debug.libを入れる

<構成:Rlease>
C/C++-コード生成ーランタイムライブラリ:マルチスレッド(/MT)
リンカ―ー入力ー追加の依存ファイルー必要な*vs2010.libを入れる

*ver2.88でも,以下のバッチファイルを作成して実行してもうまくいくらしい。
cd build3
premake4 --targetdir="../bin" --noopengl3 --no-demos --no-extras --no-enet --no-test --no-gtest vs2010
start vs2010
(引用:Bullet Physicsを使ってみる

投稿2019/02/28 14:20

編集2019/02/28 14:49
robomoco

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まずdebug-lib と release-lib の両方つっこんでるとこから何とかしようか。

投稿2019/02/25 10:23

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

robomoco

2019/02/25 11:51

debug-libとrelease-libを分けたら今度はLINK2001,1120のエラーが出ました。原因が分かりません 1>------ ビルド開始: プロジェクト: test, 構成: Release Win32 ------ 1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppBuild.targets(391,5): warning MSB8028: 中間ディレクトリ (Release) に別のプロジェクト (btcube.vcxproj) と共有されているファイルが含まれています。これにより、クリーンしてリビルド動作が適切に行われない可能性があります。 1>main.cpp 1>main.obj : error LNK2001: 外部シンボル ""public: __thiscall btStaticPlaneShape::btStaticPlaneShape(class btVector3 const &,float)" (??0btStaticPlaneShape@@QAE@ABVbtVector3@@M@Z)" は未解決です。 1>LIBCMT.lib(exe_main.obj) : error LNK2001: 外部シンボル "_main" は未解決です。 1>Release\test.exe : fatal error LNK1120: 2 件の未解決の外部参照 1>プロジェクト "btcube.vcxproj" のビルドが終了しました -- 失敗。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
episteme

2019/02/25 19:43

ライブラリが足りてない。
robomoco

2019/02/27 00:28

試しに,~~_debug.libを全て追加のライブラリに入れたのですが,それでも,上のエラーがでます…
episteme

2019/02/27 10:02

知らんがな。ライブラリが足りてない以外の原因が思い当たらん。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問