powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / ERROR_DLL_INIT_FAILED - караул !
4 сообщений из 4, страница 1 из 1
ERROR_DLL_INIT_FAILED - караул !
    #33624906
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вполне возможно что это что-нибудь простое, но...

VS2005 32-bit mode, C/C++

Куча DLL (около 2500) скомпилированы по-простому с командной строки:
cl /LDd progname.c

main собирается в VS2005 - compile:
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Gm /EHsc /RTC1 /MTd
/Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP
/errorReport:prompt
link
/OUT:"Debug/app.exe" /INCREMENTAL /NOLOGO /MANIFEST
/MANIFESTFILE:"Debug\app.exe.intermediate.manifest"
/DEBUG /PDB:"Debug/app.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86
/ERRORREPORT:PROMPT wsock32.lib
kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib
shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

После загрузки 121 DLL, LoadLibrary начинает давать ошибку 1114.

Размер app.exe в мозгах в этот момент около 64M
Свободных ресурсов на тачке до хрена (WinXP x64 2G RAM )
Такой же результат и на 2003 32-bit сервере.

ГДЕ ограничения ?
virtual mapping ??? зарезервированный стек в каждой DLL ???
Какая-нибудь админ/секьюрити засада в 2003 (XP x64 это тоже 2003) ???

Подкиньте хоть какую-нибудь идею

С Уважением,
Сергей
...
Рейтинг: 0 / 0
ERROR_DLL_INIT_FAILED - караул !
    #33625443
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TESTCASE:

mod.c:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <windows.h>
#include <stdio.h>

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
      )
{
 fprintf(stderr, "dllmain %s: %d\n", NM, ul_reason_for_call);
 return TRUE;
}

__declspec(dllexport) void MOD(void);

void MOD(void)
{
 fprintf(stderr, "Module %s CALL\n", NM);
}

main.c
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
#include <windows.h>
#include <stdio.h>

int main(int ac, char ** av)
{
 int i;
 char pgm[ 16 ];
 void * x;
 for(i =  100 ; i <  300 ; ++i ) {
  sprintf(pgm, "M%d.dll", i);
  x = LoadLibrary(pgm);
  if(x == NULL) {
   fprintf(stderr, "error load %s %d\n", pgm, GetLastError());
   break;
  }
 }
 return  0 ;
}

compile.cmd
Код: plaintext
1.
2.
3.
4.
for /L %%i IN ( 100 , 1 , 301 ) do (
 cl /LDd -DMOD=M%%i -DNM=\"%%i\" -o M%%i.dll mod.c
 del *.exp *.lib
)

compile main:
Код: plaintext
1.
cl main.c

only 126 DLLs will be loaded :-(((((
...
Рейтинг: 0 / 0
ERROR_DLL_INIT_FAILED - караул !
    #33626325
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто как FYI

Проблема (была) в том что при ключе /LD без /MD модуль CRT линковался статически в каждую DLL и это приводило к переполнению TLS (как правильно сказал Carl Daniel: "IIRC, every copy of the CRT will consume a single TLS entry").

Правильный вариант для VS2005 делать
cl /LD /MD xx.cpp ...
а потом встраивать манифест
mt /mainfest xx.dll.manifest /outputresource:xx.dll;#2

иначе нормально в VS2005 не выживешь.
вот !

--
СК
...
Рейтинг: 0 / 0
ERROR_DLL_INIT_FAILED - караул !
    #33800436
mika83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi Ska! Мож подсказать какие библы ты таскаешь со своей exe-хой?
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / ERROR_DLL_INIT_FAILED - караул !
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]