Re: Android版のSetCurrentPositionSoundMemの件 ( No.1 ) |
- 名前:管理人 日時:2023/08/31 02:20
ご情報ありがとうございます!
一箇所 SetCurrentPositionSoundMem の第一引数の型を int と書いてしまっていた箇所があったのですが、
そこは通常のコンパイルでは #ifdef の切り替えでコンパイルされないはずの箇所で、それ以外の部分は
LONGLONG となっていました
とはいえもしかしたら件の箇所がコンパイルされてしまっているのかもと思い int を LONGLONG に変更して
コンパイルしようとしたのですが、Android Studio をアップグレードした関係でビルドが通らなくなって
しまったので少し確認に時間が掛かりそうです
すみませんが明日以降に改めて確認しますので数日ほどお時間をください m(_ _;m
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.2 ) |
- 名前:ギウ 日時:2023/08/31 08:36
了解です!(Android Studioのアップグレードはほんと厄介;)
自分で宣言することで問題なく動いてますので、ゆっくりで大丈夫です。
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.3 ) |
- 名前:ギウ 日時:2023/08/31 22:09
すみません、続報です。
Runでビルド&スマホへ流すと問題ないのですが、
APKやaabファイルを作ろうとすると、ビルドエラーになりました。
longをやめて、int や long long、定義なしでも同じ;
SetCurrentPositionSoundMemをコメントアウトすれば、apkを作れます。
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.4 ) |
- 名前:管理人 日時:2023/09/02 00:37
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.5 ) |
- 名前:ギウ 日時:2023/09/02 16:42
ありがとうございます。
最新版試してみましたが、変化なしでした。。
(リンク先の確認や、リビルドも試しました)
何故この関数だけ使えないのか謎ですね;
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.6 ) |
- 名前:管理人 日時:2023/09/02 20:49
うーん駄目でしたか…
LONGLONG の #define 定義がどこかで long と定義されていて、そちらが優先されて
しまっている可能性を考えて SetCurrentPositionSoundMem の実装部分を
#ifdef __ANDROID__
extern int SetCurrentPositionSoundMem( long long SamplePosition, int SoundHandle )
#else // __ANDROID__
extern int SetCurrentPositionSoundMem( LONGLONG SamplePosition, int SoundHandle )
#endif // __ANDROID__
{
↑
こちらのように Android でビルドする際は LONGLONG ではなく直接 long long と記述するようにしてみました
これでも駄目でしたら謎ですが、よろしければお試しください m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest.zip // Android版
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.7 ) |
- 名前:ギウ 日時:2023/09/03 08:00
最新版試しました!
DxLib_Init()
ProcessMessage()
DxLib_End()
でリンクエラーになりました。
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
あと、DxLib.h の方、LONGLONG のままの記述でしたけどこれは大丈夫でしょうか。
>LONGLONG の #define 定義がどこかで long と定義されていて、そちらが優先されて
APKやaabは64bitと32bitを両方ビルドしてるみたいなので、それによって変わってしまうとか(?)
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.8 ) |
- 名前:管理人 日時:2023/09/04 00:44
すみません、Android版では不要だと思っていた DxGateway.cpp を
コンパイル対象から外したのがリンクエラーの原因です…
再度アップしましたので、何度も申し訳ありませんが
よろしければお試しください m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest.zip // Android版
> あと、DxLib.h の方、LONGLONG のままの記述でしたけどこれは大丈夫でしょうか。
はい
ld: error: undefined symbol: DxLib::SetCurrentPositionSoundMem(long long, int)
>>> did you mean: DxLib::SetCurrentPositionSoundMem(long, int)
↑
こちらは『ヘッダファイルでは long long だけど、実際に存在した関数では long だったよ』
というエラーなので、ヘッダファイル( DxLib.h )の方は問題なく LONGLONG として処理されていると思いますので…
> APKやaabは64bitと32bitを両方ビルドしてるみたいなので、それによって変わってしまうとか(?)
LONGLONG は Android版では
#ifndef LONGLONG
#define LONGLONG int64_t
#endif
↑
このように 64bit固定として定義しているので、それは無いと思いますが…
( 32bit環境では64bit整数型は long long、 64環境では64bit整数型は long、だったりしたら有り得そうですが… )
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.9 ) |
- 名前:ギウ(解決) 日時:2023/09/04 09:35
ご対応ありがとうございます!
APKとaabファイルも作れました!
ただ宣言はしないといけなくて、
#define DX_LONG long long
namespace DxLib {
extern int SetCurrentPositionSoundMem(DX_LONG, int);
}
void hoge()
{
DxLib::SetCurrentPositionSoundMem((DX_LONG)pos, id);
}
こんな感じで通りました。
謎は残りますが(こちらの問題ということも;)、
ひとまず解決としてさせて頂きます!
(こちらでビルドテストが必要な場合はお付き合いします)
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.10 ) |
- 名前:管理人(解決) 日時:2023/09/05 02:07
APK と aabファイルが作成できたとのことで何よりです
とはいえ、追加で定義が必要だったのですね…
> (こちらでビルドテストが必要な場合はお付き合いします)
すみません、お言葉に甘えて…
追加の定義が無くてもビルドが成功するように
できたと思われるバージョンをアップしましたので、
よろしければお試しください m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest.zip // Android版
LONGLONG は DxDataTypeAndroid.h の中で
#ifndef LONGLONG
#define LONGLONG int64_t
#endif
と定義していたのですが、int64_t は stdint.h の中で
typedef __int64_t int64_t;
と定義されていて、更に __int64_t は
#if defined(__LP64__)
typedef long __int64_t;
#else
typedef long long __int64_t;
#endif
と定義されていました
__LP64__ は 64bit環境では自動的に定義されていることになる識別子なので
つまり 64bit環境では int64_t は long に、32bit環境では int64_t は long long に
置き換えられていたということになります
なので、最初のギウさんのご投稿にある
ld: error: undefined symbol: DxLib::SetCurrentPositionSoundMem(long long, int)
>>> did you mean: DxLib::SetCurrentPositionSoundMem(long, int)
↑
こちらのエラーが、もし 64bit環境のコンパイル時に発生したものだとしますと
実際にある関数が long なのは正しく、使用しようとしている方が long long なのが
間違っていることになります
なので、もしかしたらギウさんのコードの中で #include "DxLib.h" の前の行などに
別のヘッダファイルのインクルード文があり、そのヘッダファイルの中で
#define int64_t long long
などの記述があって、64bit環境でも 32bit環境でも long long として処理されてしまい、
libDxLib.a の中にある関数と定義が異なってしまい件のエラーが発生していたのかもしれません
|
Re: Android版のSetCurrentPositionSoundMemの件 ( No.11 ) |
- 名前:ギウ(解決) 日時:2023/09/06 08:36
最新版ありがとうございます!
宣言無しで通りました!
ご説明もありがとうございます!
>なので、もしかしたらギウさんのコードの中で #include "DxLib.h" の前の行などに
すみません! 最初の投稿時はこちらの宣言が前に来ていました。
たぶんエラーメッセージが変わってたはずなので報告したほうが良かったですね;
(移動させてもビルドが通らなかったので関係ないと思ってしまいました)
今回も迅速なご対応ありがとうございます!
|