Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Не линкуется (или как настроить линкер?)

243
28 марта 2005 года
pacific_7
1.9K / / 06.09.2004
Решил напрограммить маленькую прогу на VC++
Зашел по ссылочке http://www.uinc.ru/articles/28/index.shtml. Сделал как сказано, и естественно получил бяку от линкера - не может найти __chkesp (компилится нормально). Ответ в faq'е статьи вроде есть, да только что-то он мне мало о чем говорит. Каким макаром можно заменить CHKESP.obj на свой, в смысле где взять свой CHKESP.obj? Да еще и так, что бы в нем не было ничего лишнего?
Среда разработки VC++ 6.0 SE. Помогите чем могите - очень уж интересно с этим разобраться.
9.5K
28 марта 2005 года
nikiforov
24 / / 21.03.2005
Поскольку размер debug build'а не важен, то для отладки можно включить стандартные библиотеки. Для этого можно использовать следующую конструкцию:
 
Код:
#ifndef _DEBUG
#pragma comment(linker,"/NODEFAULTLIB")
#endif

Кроме того, понадобится функция main(), так как стандартная библиотека содержит ссылку не нее. При указании собственной стартовой точки, функция main() выполняться не будет, и нужна только для успешной линковки.
 
Код:
#ifdef _DEBUG
int main(HINSTANCE hInst,HINSTANCE hPrev, LPSTR lpComLine, int nShow )
{
    return 0;
}
#endif

После этого можно нормально отлаживать приложение, а release будет такой же маленький.
243
28 марта 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by nikiforov
Поскольку размер debug build'а не важен, то для отладки можно включить стандартные библиотеки. Для этого можно использовать следующую конструкцию:
 
Код:
#ifndef _DEBUG
#pragma comment(linker,"/NODEFAULTLIB")
#endif

Кроме того, понадобится функция main(), так как стандартная библиотека содержит ссылку не нее. При указании собственной стартовой точки, функция main() выполняться не будет, и нужна только для успешной линковки.
 
Код:
#ifdef _DEBUG
int main(HINSTANCE hInst,HINSTANCE hPrev, LPSTR lpComLine, int nShow )
{
    return 0;
}
#endif

После этого можно нормально отлаживать приложение, а release будет такой же маленький.


Не-а, не катит. Размер бинарника тот же, что и без этих наворотв с линкером (генерация отладочной информации отключена). Может, что делаю не так? Убираю _DEBUG из опций проекта, даже #undef _DEBUG в начале вписал - бестолку. Как правильно указать линкеру release версию? Да еще и нужная функция не работает:
#pragma comment(linker,"/ENTRYPOINT:Xmain")
main() оставлен пустой (я кстати и раньше так делал), Xmain() не выполняется! В итоге программа просто ничего не делает.

243
28 марта 2005 года
pacific_7
1.9K / / 06.09.2004
Эге, нашел Batch Build, снял галку с debug, и получил от линкера, что он не может теперь найти _main (все сдалано как в вашем примере с #ifdef _DEBUG). Можно еще что-нибудь предпринять?
9.5K
28 марта 2005 года
nikiforov
24 / / 21.03.2005
Цитата:
Originally posted by pacific_7
Эге, нашел Batch Build, снял галку с debug, и получил от линкера, что он не может теперь найти _main (все сдалано как в вашем примере с #ifdef _DEBUG). Можно еще что-нибудь предпринять?



А макроопределение DEBUG обратно включили ?

Если ничего не помогает, могу выслать полный рабочий проект (VC++ 6.0) такого маленького приложения.

243
28 марта 2005 года
pacific_7
1.9K / / 06.09.2004
Цитата:
Originally posted by nikiforov

Если ничего не помогает, могу выслать полный рабочий проект (VC++ 6.0) такого маленького приложения.


Макроопределение что включено, что выключено - без толку. Проект - высылайте конечно, правда у меня есть уже с uinc скачаный - компилится нормально, а вот при линке...
Может ваш работать будет.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог