У меня есть код ниже, который связывает и отлично работает в 32-битном режиме -
#include "safeint3.hpp"
typedef SafeInt<SIZE_T> SAFE_SIZE_T;
SAFE_SIZE_T sizeOfCache;
SAFE_SIZE_T _allocateAmt;
Где safeint3.hpp - текущая версия, которую можно найти на Codeplex SafeInt . Для тех, кто не знает об этом, safeint - это шаблонный класс, который делает работу с различными целочисленными типами и размерами «безопасной». Процитируем видео 9-го канала о программном обеспечении - «он пишет код, который должен».
Какой мой случай. У меня есть класс, который управляет большим кешем объектов в памяти (> 6 ГБ), и я очень обеспокоен тем, чтобы убедиться, что у меня нет проблем переполнения / недостаточного заполнения моих указателей / размеров / других целочисленных переменных. В этом случае он решает много проблем.
Моя проблема возникает при переходе из 32-разрядного режима разработки в 64-разрядный режим производства. Когда я создаю приложение в этом режиме, я получаю следующие предупреждения компоновщика -
1>cachecontrol.obj : warning LNK4006: "bool __cdecl IntrinsicMultiplyUint64(unsigned __int64 const &,unsigned __int64 const &,unsigned __int64 *)" (?IntrinsicMultiplyUint64@@YA_NAEB_K0PEA_K@Z) already defined in ImageInRamCache.obj; second definition ignored
1>cachecontrol.obj : warning LNK4006: "bool __cdecl IntrinsicMultiplyInt64(__int64 const &,__int64 const &,__int64 *)" (?IntrinsicMultiplyInt64@@YA_NAEB_J0PEA_J@Z) already defined in ImageInRamCache.obj; second definition ignored
Хотя я понимаю, что могу игнорировать ошибку, я бы хотел (а) предотвратить появление предупреждения или (б) заставить его исчезнуть, чтобы мой отдел контроля качества не пометил его как проблему. И потратив некоторое время на его изучение, я не могу найти способ сделать это.