Androidソース/外部/ statictestフォルダの中に入れたテスト用のC++コードを添付してください。このフォルダ内のファイルはstatictest.cpp、statictest.h、Android.mkです。アンドロイドでC++実行可能ファイルを実行しているときに静的初期化に問題がありますか?
statictest.cpp
#include <stdio.h>
#include "statictest.h"
NPT_Mutex Application::lock;
int main()
{
// NPT_Mutex *obj = new NPT_Mutex();
// Application *obj = new Application();
printf("Lock address is 0x%x\n",(unsigned int)&(Application::lock));
return 0;
}
statictest.h
class NPT_Mutex
{
public:
NPT_Mutex(){result = 10;}
~NPT_Mutex(){}
private:
int result;
};
class Application
{
public:
Application(){}
~Application(){}
static NPT_Mutex lock;
};
Android.mk
ifneq ($(TARGET_SIMULATOR),true)
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= statictest.cpp
LOCAL_C_INCLUDES:= statictest.h
LOCAL_MODULE := statictest
LOCAL_STATIC_LIBRARIES := libcutils libc libstdc++
include $(BUILD_EXECUTABLE)
endif # TARGET_SIMULATOR != true
私は、ソースコードをコンパイルし、MIPSツールチェーンとAndroidのビルド設定を使用して実行可能ファイルを作成しました。しかし、私が見ているのは、静的初期化がここでは起こっていないということです。しかし、同じコードがx-86環境でx-86ツールチェーンを使って実行されているときは、明らかに初期化されています。
この問題を理解して解決するために私の貴重な点をお寄せください。
おかげで、
セン
printfは何を示していますか?結果の価値を印刷できますか?おそらくいくつかのprintfをコンストラクタとデストラクタに追加しますか?好奇心のため、クラスのミューテックスメンバーがなぜ静的である必要があるのでしょうか? – AJG85
実際にはこれはテストの実装ですが、実際にはAndroidにプロジェクトを移植しようとしていましたが、このような静的メンバーが数多くあります。 – Sen
リンカーによって.initセクションに置かれたものをダンプしましたか?objdumpを使ってチェックする __do_global_ctors_auxでgdb/gdbserverを壊して、グローバルコンストラクタを実行するステップがあるかどうかを確認してください。 これは、これがいくつかのMIPSバイオリンC lib/toolchainの組み合わせに関する問題であると思われます。あなたのツールチェーンはどこから来たのですか?MIPSはAndroidフォークをhttp://developer.mips.com/android/でサポートしていますか? – kert