При написании предыдущей статьи мне пришлось столкнуться с проблемой
Данная проблема возникла IMHO из-за того что я снес Visual Studio 2008 Express и водрузил Visual Studio 2008 SP1 Express. (Также грешу на то, что я накатил Windows SDK для компиляции x64).
Но суть не в том, что привело к этой проблеме, а как ее решить.
Проблема известна Мелкософту (http://support.microsoft.com/kb/946040), но адекватного решения я не нашел -- патч не желает накатываться на Visual Studio 2008 Express -- мотивируя тем что "None of the products that are addressed by this software update are installed on this computer. Click Cancel to exit setup." А что ему хочется фиксить, я так и не понял. Кстати, по отзвукам от пользователей этот патч не смог побороть проблемы в Visual Studio C/C++ 2008, а иногда такая проблема возникает и у Visual Studio C/C++ 2005.
Неужто нас так заставляют переползать на Visual Studio 2010 - Visual Studio 2012?
Из описания следует, что проблема в Mspdbcore.dll и фикс должен установить файлы версии 9.0.21022.37 с размером 288256 для x32 или 396800 для x64.
У меня же стоит версия Mspdbcore.dll 9.0.30729.1 с размером 288768 x32.
Т.е. Мелкософт целеноправельно предлагает откатиться на более старую версию.
Распаковать VS90-KB946040.exe мне с первого захода удалось до VS90-KB946040.msp, где храняться нужные мне файлы, до дальше распаковать не получилось :(...
Пришлось искать на просторах интернета другой Mspdbcore.dll.
Нашел Mspdbcore.dll 8.0.50727.42 (http://yadi.sk/d/U83nD7nS3IjnK) подложил его в "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\" предварительно сделал резервную копию.
И вуаля :-) Компиляция прошла без проблем :-))))
Но меня все же жаба душила, что эта версия Mspdbcore.dll от Visual C/C++ 2005 и она явна не рекомендована для Visual C/C++ 2008 -- пришлось все же распатронить прааааативный msp.
Наткнулся на забавную статью http://qwers.com/Poleznie-soveti-dlja-Windows7/Interfeis/intvza19.htm
Но самого файла MSI Extractor там не оказалось :(((
Пришлось продолжнить поиски и скачать и установить наверно штук 20 различных утилит, которые были либо абсолютно бесполезными либо были троянцами :((
В результате я наткнулся на
http://superuser.com/questions/307678/how-to-extract-files-from-msi-package
http://blogs.msdn.com/b/heaths/archive/2006/04/07/571138.aspx
и наконец на
https://skydrive.live.com/?cid=9415f61cbb1a8030&id=9415F61CBB1A8030!6614
(ссылки привожу в знак уважения к авторам)
В результате мне удалось скачать MsiX (http://yadi.sk/d/18bE_K_G3Inz0)
и с грехом пополам распаковать ненавистный VS90-KB946040.msp
В результате я получил два файла (после рекурсивной распаковки парочкой различных утилит, анализа файлов и переименования в удобопонятный вид)
21.12.2007 05:35 288 256 mspdbcore.dll
21.12.2007 05:41 396 800 mspdbcore.dll
Файлы выложил сюда (http://yadi.sk/d/sYWvIBgc3InzK)
Далее файл mspdbcore.dll я положил "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\" и пошел проверять компиляцию...
ВАШУ МАШУ!!! %\
%&^%&^%*&%^#@&*%^$^%^@#%$^#%@*&%$@#&$^!!!
Мало того что вернулась проблема
f:\...\proc.c(11) : error C2471: cannot update program database 'f:\...\debug\vc90.idb'
так еще появилась новая:
f:\...\signals.c : fatal error C1090: PDB API call failed, error code '23' : '(
Срочно меняю mspdbcore.dll обратно на 8.0.50727.42
%^&%&*%^*&^%&^
C1090 пропала, но C2471 осталась :(((
При этом файл vc90.idb и mspdbcore.dll лочатся до перезагрузки системы :((( Вывод: mspdbcore.dll падает :(((
Меняю на 9.0.30729.1 => C2471, но файлы vc90.idb и mspdbcore.dll не лочатся :(((
Меняю на 9.0.21022.37 => C2471 и C1090, но файлы vc90.idb и mspdbcore.dll не лочатся :(((
Да кстати, маленький совет -- после замены DLL перезагружайте систему и удаляйте все в директория Debug и Release, а также "ненужные" самосозданные файлы.
Выводы:
1) ЛУЧШЕЕ ВРАГ ХОРОШЕГО!!!
2) Я уже не уверен, что (ну почти) коммерческий Visual Studio менее глюкав, чем абсолютно бесплатный MinGW
3) Если все работает, то ничего не трогай (с) бородатый анекдот про программиста и его сына
Error C2471: cannot update program database
Данная проблема возникла IMHO из-за того что я снес Visual Studio 2008 Express и водрузил Visual Studio 2008 SP1 Express. (Также грешу на то, что я накатил Windows SDK для компиляции x64).
Но суть не в том, что привело к этой проблеме, а как ее решить.
Проблема известна Мелкософту (http://support.microsoft.com/kb/946040), но адекватного решения я не нашел -- патч не желает накатываться на Visual Studio 2008 Express -- мотивируя тем что "None of the products that are addressed by this software update are installed on this computer. Click Cancel to exit setup." А что ему хочется фиксить, я так и не понял. Кстати, по отзвукам от пользователей этот патч не смог побороть проблемы в Visual Studio C/C++ 2008, а иногда такая проблема возникает и у Visual Studio C/C++ 2005.
Неужто нас так заставляют переползать на Visual Studio 2010 - Visual Studio 2012?
Из описания следует, что проблема в Mspdbcore.dll и фикс должен установить файлы версии 9.0.21022.37 с размером 288256 для x32 или 396800 для x64.
У меня же стоит версия Mspdbcore.dll 9.0.30729.1 с размером 288768 x32.
Т.е. Мелкософт целеноправельно предлагает откатиться на более старую версию.
Распаковать VS90-KB946040.exe мне с первого захода удалось до VS90-KB946040.msp, где храняться нужные мне файлы, до дальше распаковать не получилось :(...
Пришлось искать на просторах интернета другой Mspdbcore.dll.
Нашел Mspdbcore.dll 8.0.50727.42 (http://yadi.sk/d/U83nD7nS3IjnK) подложил его в "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\" предварительно сделал резервную копию.
И вуаля :-) Компиляция прошла без проблем :-))))
Но меня все же жаба душила, что эта версия Mspdbcore.dll от Visual C/C++ 2005 и она явна не рекомендована для Visual C/C++ 2008 -- пришлось все же распатронить прааааативный msp.
Наткнулся на забавную статью http://qwers.com/Poleznie-soveti-dlja-Windows7/Interfeis/intvza19.htm
Но самого файла MSI Extractor там не оказалось :(((
Пришлось продолжнить поиски и скачать и установить наверно штук 20 различных утилит, которые были либо абсолютно бесполезными либо были троянцами :((
В результате я наткнулся на
http://superuser.com/questions/307678/how-to-extract-files-from-msi-package
http://blogs.msdn.com/b/heaths/archive/2006/04/07/571138.aspx
и наконец на
https://skydrive.live.com/?cid=9415f61cbb1a8030&id=9415F61CBB1A8030!6614
(ссылки привожу в знак уважения к авторам)
В результате мне удалось скачать MsiX (http://yadi.sk/d/18bE_K_G3Inz0)
и с грехом пополам распаковать ненавистный VS90-KB946040.msp
В результате я получил два файла (после рекурсивной распаковки парочкой различных утилит, анализа файлов и переименования в удобопонятный вид)
21.12.2007 05:35 288 256 mspdbcore.dll
21.12.2007 05:41 396 800 mspdbcore.dll
Файлы выложил сюда (http://yadi.sk/d/sYWvIBgc3InzK)
Далее файл mspdbcore.dll я положил "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\" и пошел проверять компиляцию...
ВАШУ МАШУ!!! %\
%&^%&^%*&%^#@&*%^$^%^@#%$^#%@*&%$@#&$^!!!
Мало того что вернулась проблема
f:\...\proc.c(11) : error C2471: cannot update program database 'f:\...\debug\vc90.idb'
так еще появилась новая:
f:\...\signals.c : fatal error C1090: PDB API call failed, error code '23' : '(
Срочно меняю mspdbcore.dll обратно на 8.0.50727.42
%^&%&*%^*&^%&^
C1090 пропала, но C2471 осталась :(((
При этом файл vc90.idb и mspdbcore.dll лочатся до перезагрузки системы :((( Вывод: mspdbcore.dll падает :(((
Меняю на 9.0.30729.1 => C2471, но файлы vc90.idb и mspdbcore.dll не лочатся :(((
Меняю на 9.0.21022.37 => C2471 и C1090, но файлы vc90.idb и mspdbcore.dll не лочатся :(((
Меняю на 8.0.50727.42 => свежая C1033
f:\...\signals.c : fatal error C1033: cannot open program database 'f:\...\debug\vc90.idb'
f:\...\thread.c : fatal error C1033: cannot open program database 'f:\...\debug\vc90.idb'
f:\...\signals.c : fatal error C1033: cannot open program database 'f:\...\debug\vc90.idb'
f:\...\thread.c : fatal error C1033: cannot open program database 'f:\...\debug\vc90.idb'
o:\...\applink.c : fatal error C1033: cannot open program database 'f:\...\debug\vc90.idb'
т.к. пол проекта было скомпилировано без ошибок, то вывод mspdbcore.dll падает после полусотни исходников, лочит vc90.idb, лочится сам и после этого компиляция невозможна :(((
Как возможное решение для ленивых, заменить параметр создания дебаг информации (Project\Properties\Configuration Properties\C/C++\General\Debug information format: /ZI на /Zi в режиме Debug (а режиме Release он и так стоит)), но мы то простых путей не ищем %)
[to be continued]
Да кстати, маленький совет -- после замены DLL перезагружайте систему и удаляйте все в директория Debug и Release, а также "ненужные" самосозданные файлы.
Выводы:
1) ЛУЧШЕЕ ВРАГ ХОРОШЕГО!!!
2) Я уже не уверен, что (ну почти) коммерческий Visual Studio менее глюкав, чем абсолютно бесплатный MinGW
3) Если все работает, то ничего не трогай (с) бородатый анекдот про программиста и его сына
Entry point указывает на хитрую функцию, которая кроме всего прочего, получает аргументы из командной строки и формирует из них параметры main: argv и argc. envp тоже получает она. Если указать в качестве entry point функцию main, работать программа будет, но вот argv и argc будут, мягко говоря, недействительными.