Ранг: 40.9 (посетитель), 8thx Активность: 0.04↘0.01 Статус: Участник
Создано: 14 августа 2017 12:49 · Поправил: FalseMaster · Личное сообщение · #1
Дело в следующем. Пытаюсь перелинковать msvcrt.lib. Порядок действий был таков: выковырял из оригинальной либы объектники, и состряпал из выхлопа DumpBin DEF-файл, на основе которого собрал свою либу и скомпоновал её с выдранными объектниками. Процесс проходит без ошибок и ворнингов, при подключении созданной либы к проекту (DLL) тоже всё нормуль, но трабла в том, что в секцию импорта DLL'ки попадает имя _CxxThrowException@8, тогда как msvcrt.dll экспортирует _CxxThrowException. Вот тут описан аналогичный "эксперимент". Добавляя в DEF-файл строки:
Code:
_CxxThrowException
__CxxThrowException@8 = _CxxThrowException
аффтар якобы получает годную либу. Так вот, это всё х**ня. Линкер игнорит алиасы и пихает в LIB-файл оба имени, а при сборке DLL естественно выбирает то, которое сгенерил компилер, т.е. stdcall-ное. Между тем в оригинальной мелкомягкой либе присутствует только ОДНО определение – __CxxThrowException@8 (с префиксом "__imp_" и без оного) и при этом каким-то загадочным образом в импорте DLL оказывается _CxxThrowException. Собственно вопрос: как это делается?
BlackCode пишет: МАСМ втыкает msvcrt120 Поставь 17 студию и будет втыкать msvcrt140, а если все поставишь даже по минимуму, то сможешь выбрать из списка любую.