Ошибка сегментации при использовании dlclose (…) на платформе Android

У меня есть некоторые проблемы при использовании API динамической загрузки ( : dlopen () , dlclose () и т. Д.) На Android. Я использую автономный набор инструментов NDK (версия 8) для компиляции приложений и библиотек. Версия Android - 2.2.1 Froyo.

Вот исходный код простой разделяемой библиотеки.

#include <stdio.h>

int iii = 0;
int *ptr = NULL;

__attribute__((constructor))
static void init()
{
    iii = 653;
}

__attribute__((destructor))
static void cleanup()
{
}

int aaa(int i)
{
    printf("aaa %d\n", iii);
}

Вот исходный код программы, которая использует указанную библиотеку.

#include <dlfcn.h>
#include <stdlib.h>
#include <stdio.h>

int main()
{
    void *handle;
    typedef int (*func)(int);
    func bbb;

    printf("start...\n");

    handle = dlopen("/data/testt/test.so", RTLD_LAZY);
    if (!handle)
    {
        return 0;
    }

    bbb = (func)dlsym(handle, "aaa");
    if (bbb == NULL)
    {
        return 0;
    }

    bbb(1);

    dlclose(handle);
    printf("exit...\n");

    return 0;
}

С этими исходниками все работает нормально, но когда я пытаюсь использовать некоторые функции или классы STL, программа вылетает из-за ошибки сегментации , когда функция main () завершается, например, при использовании этого исходного кода для разделяемой библиотеки .

#include <iostream>

using namespace std;

int iii = 0;
int *ptr = NULL;

__attribute__((constructor))
static void init()
{
    iii = 653;
}

__attribute__((destructor))
static void cleanup()
{
}

int aaa(int i)
{
    cout << iii << endl;
}

При использовании этого кода программа завершает работу с ошибкой сегментации после или во время выхода из функции main () . Я попробовал пару тестов и нашел следующие результаты.

  1. Без использования STL все работает нормально.
  2. Если использовать STL и не вызывать dlclose () в конце, все работает хорошо.
  3. Я пытался скомпилировать с различными флагами компиляции, такими как -fno-use-cxa-atexit или -fuse-cxa-atexit , результат тот же.

] Что не так в моем коде, использующем STL?

11
задан ThinkingStiff 10 March 2013 в 01:51
поделиться