ни у кого нет? libctiny.lib добавляет прилично функций в таблицу импорта, к тому же с ее помощью у меня не получается собирать x64 код... желательно исходники, так как всегда было интересно посмотреть на функционал инициализации, ну и чтоб была возможность подправить, если что...
там мне не хватает реализации функций для работы с 64-битными числами... сейчас копаюсь в исходниках CRT студии, но чет ничего не могу найти(((
Хм, есть сервисы вроде bugmenot. Для оперы даже есть скрипты, посылающее запросы на эти сервисы. Вот тут дофига скриптов (http://ruzanow.ru/page.php?2).
я тоже когда смотрел исходники CRT со студией идет который не раз замечал что он на С++ ) есть там такие файлы которые msvc с опцией /TC не скомпилит
хех... так а в чем проблема? задача была сделать поддержку функционала, по сути не важно на чем она была бы сделана, хоть на лиспе)))))
_initterm производит инициализацию статических переменных, сравните с WCRT Код (Text): #pragma section(".CRT$XCA", read, write) #pragma data_seg(".CRT$XCA") // start of ctor section _PVFV __xc_a[] = {0}; #pragma section(".CRT$XCZ", read, write) #pragma data_seg(".CRT$XCZ") // end of ctor section _PVFV __xc_z[] = {0}; Код (Text): #pragma data_seg(".CRT$XCA") _PVFV __xc_a[] = { 0 }; #pragma data_seg(".CRT$XCZ") _PVFV __xc_z[] = { 0 }; #pragma data_seg(".CRT$XIA") _PIFV __xi_a[] = { 0 }; #pragma data_seg(".CRT$XIZ") _PIFV __xi_z[] = { 0 }; #pragma data_seg(".CRT$XPA") _PVFV __xp_a[] = { 0 }; #pragma data_seg(".CRT$XPZ") _PVFV __xp_z[] = { 0 }; #pragma data_seg(".CRT$XTA") _PVFV __xt_a[] = { 0 }; #pragma data_seg(".CRT$XTZ") _PVFV __xt_z[] = { 0 }; #pragma data_seg() #pragma comment(linker, "/merge:.CRT=.data") .CRT$XC это инициализаторы С++ статиков, .CRT$XI, если не ошибаюсь, С статиков.
ну хорошо... это подойдет для C-кода, но не для C++... в частности использование классов будет затруднено без всех инициализаций))) задача мелкомягких делать вещи, подходящие ко всему (поддержка и старого и нового), поэтому у них такое гигантское CRT))) и тем более не стоит удивляться, что многое там написано на C++... там кстати и masm во многом поучаствовал))) из другой реализации CRT, с комментариями: Код (Text): #pragma data_seg(".CRT$XIA") // Begin C Initializer Sections _PVFV xia[] = { NULL }; #pragma data_seg(".CRT$XIZ") // End C Initializer Sections _PVFV xiz[] = { NULL }; #pragma data_seg(".CRT$XCA") // Begin C++ Constructor Sections _PVFV xca[] = { NULL }; #pragma data_seg(".CRT$XCZ") // End C++ Constructor Sections _PVFV xcz[] = { NULL }; #pragma data_seg(".CRT$XPA") // Begin C Pre-Terminator Sections _PVFV xpa[] = { NULL }; #pragma data_seg(".CRT$XPZ") // End C Pre-Terminator Sections _PVFV xpz[] = { NULL }; #pragma data_seg(".CRT$XTA") // Begin C Terminator Sections _PVFV xta[] = { NULL }; #pragma data_seg(".CRT$XTZ") // End C Terminator Sections _PVFV xtz[] = { NULL };
Наоборот, ведь в TLIBC только #pragma data_seg(".CRT$XCA") // Begin C++ Constructor Sections _PVFV xca[] = { NULL };
да-да... чет я немного запутался... допустим при использовании tlibc линкер VS2010 Ultimate не хочет собирать инструкции вида: Код (Text): CClass1 cl1 = new CClass1(...); так а к чему вы клоните то? до сих пор не могу понять)))
Это должно собираться с tlibc поскольку newdel.cpp собержит определения new и delete. А вот будут ли инициализироваться Сишные статики, не уверен. Поэтому я клоню что для С лучше должен подходить Сшный рантайм WCRT, а не недоделанный С++ный TLIBC.
Оно должно и собирается, но интересно, почему ты думал иначе? Код (Text): ;t.cpp void* operator new(size_t){ return 0; } struct CClass1 { CClass1(...){} }; CClass1 cl1 = new CClass1(0); void entry(){} cl.exe t.cpp /link /nod /entry:entry /subsystem:windows Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved. t.cpp Microsoft (R) Incremental Linker Version 8.00.50727.762 Copyright (C) Microsoft Corporation. All rights reserved. /out:t.exe /nod /entry:entry /subsystem:windows t.obj t.obj : warning LNK4210: .CRT section exists; there may be unhandled static initializers or terminators