Помогите описать intrinsic функцию (memset) VC 9
От: fkRTTI  
Дата: 12.11.09 18:58
Оценка:
Добрый вечер, решил использовать динамический импорт и директиву /nodefaultlib для полной минимизации размера модуля.

Все нужные функции импортирую, НО, по непонятным причинам возникает ошибка линковки:
PModule.obj : error LNK2001: unresolved external symbol _memset

Создал маленький проект, туда запихал небольшой код, отказался от црт (/nodefaultlib + /entry:winmain) и все равно возникала эта ошибка! В итоге оказалось, что комментируя WINAPI функцию GetClassName, ошибка исчезала. Возникает ощущение что компилятор сам добавляет memset в проект при определенных условиях. Поэтому вижу только один путь для решения проблемы: описать функцию memset.

При использовании /nodefaultlib, ни одна lib библиотека к проекту не подключается, поэтому таким образом определить memset нельзя. Пробовал прописать напрямую в проекте:
extern "C"
{
     void * memset (void *Dst, int Val, size_t Size)
     {
          return Mmemset(Dst, Val, Size); // импортируемая мною из ntdll функция
     }
}

компилятор орет:
error C2169: 'memset' : intrinsic function, cannot be defined

Если указать директиву #pragma intrinsic (memset), то вдобавок к предыдущей ошибке возникает warning C4164: 'memset' : intrinsic function not declared

Отключал использование intrinsic-функций (в настройках проекта и добавлением /Oi-) все равно intrinsic function, cannot be defined! Подскажите пожалуйста как решить проблему.
Re: Помогите описать intrinsic функцию (memset) VC 9
От: byleas  
Дата: 12.11.09 19:25
Оценка:
extern "C" void * __cdecl memset(void * const s, int c, size_t n);
#pragma intrinsic(memset)

Этого должно быть достаточно.
Re: Помогите описать intrinsic функцию (memset) VC 9
От: fkRTTI  
Дата: 12.11.09 19:29
Оценка:
#pragma optimize("", on)

не помогают
Re[2]: Помогите описать intrinsic функцию (memset) VC 9
От: fkRTTI  
Дата: 12.11.09 20:13
Оценка:
Здравствуйте, byleas, Вы писали:

B>
B>extern "C" void * __cdecl memset(void * const s, int c, size_t n);
B>#pragma intrinsic(memset)

B>Этого должно быть достаточно.

недостаточно(
Re: Помогите описать intrinsic функцию (memset) VC 9
От: MShura  
Дата: 12.11.09 21:46
Оценка:
Этой проблеме уже несколько лет.
http://rsdn.ru/forum/cpp.applied/1665635.1.aspx
Автор: MShura
Дата: 07.02.06


RTT>Если указать директиву #pragma intrinsic (memset), то вдобавок к предыдущей ошибке возникает warning C4164: 'memset' : intrinsic function not declared


RTT>Отключал использование intrinsic-функций (в настройках проекта и добавлением /Oi-) все равно intrinsic function, cannot be defined! Подскажите пожалуйста как решить проблему.


Избавиться от всех явных и неявных вызовов memset, заменив эти вызовы на явный вызов своей memset.
Re[3]: Помогите описать intrinsic функцию (memset) VC 9
От: byleas  
Дата: 12.11.09 23:15
Оценка:
Здравствуйте, fkRTTI, Вы писали:

RTT>недостаточно(

Ошибся, как inrinsic она только в x64.
Re[3]: Помогите описать intrinsic функцию (memset) VC 9
От: gear nuke  
Дата: 13.11.09 00:27
Оценка:
Здравствуйте, fkRTTI, Вы писали:

RTT>недостаточно(


...и линкуй с ntdll.lib. Даже если убрать явные вызовы, и заменить их обнулением через for, компилятор вставит вызов memset.
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.