Статическая ссылка stdC++ без STB_GNU_UNIQUE вызывает утечку памяти при dlclose

Я должен сделать dso, что статическая ссылка stdC++ и необходимость может выгружаться из памяти динамически. Поэтому я попытался с компиляцией GCC с --disable-gnu-unique-object и использовать золотую связь с -Wl,--no-gnu-unique опции. Но оба содержат проблему утечки памяти, даже я ничего не делаю, кроме вызова dlopen() dlclose() в основном. Код теста, как:

int main()
{
    for(int i=0;i<1000;i++)
    {
        void * h=dlopen(filepath);
        if(h)
             dlclose(h);
    }
    return 0;
}

Чем я проверил память cat /proc/pid/maps до и после я обнаружил, что только куча меняется все больше и больше каждый раз. Около 90 м после 1000 раз позвоните мне и получите 90 м по-прежнему слишком большой.

026fb000-0274e000 rw-p 00000000 00:00 0                                  [heap]

после гуглил около 2 недель но ничего полезного по этому вопросу. Только найдите документ, указанный ниже.

-fno-gnu-unique В системах с недавним GNU-ассемблером и библиотекой C компилятор C++ использует привязку "STB_GNU_UNIQUE", чтобы обеспечить уникальность определений статических членов-данных шаблона и статических локальных переменных во встроенных функциях даже при наличии "RTLD_LOCAL"; это необходимо для того, чтобы избежать проблем с библиотекой, используемой двумя разными плагинами "RTLD_LOCAL", в зависимости от определения в одном из них и, следовательно, от несогласия с другим относительно привязки символа. Но это приводит к тому, что "dlclose" игнорируется для затронутых DSO; если ваша программа использует повторную инициализацию DSO с помощью "dlclose" и "dlopen", вы можете использовать -fno-gnu-unique.

Это ошибка Linux? Кто-нибудь может мне помочь по этому вопросу? Благодарю. Окружающая среда - gcc 5.3.1. Я связался с определениями _GLIBCXX_USE_CXX11_ABI.

0 ответов

Другие вопросы по тегам