Я пытаюсь написать слой взаимодействия CLI между существующей кодовой базой C++ и приложением C# wpf. Мои библиотеки C++ уже перегружают глобальные новые и удаляются, чтобы реализовать мое собственное отслеживание памяти и другие тонкости. Таким образом, зависимости выглядеть примерно так:Конфликтные перегрузки глобального удаления
(Native библиотека скомпилированной к статическому ОМТУ) -> (CLI слой) -> (C# WPF приложение)
Однако всякий раз, когда я включаю свои собственные библиотеки и попытаться построить мой проект CLI, я бегу в противоречивой символ глобального удалять который был уже определен в msvcrtd:
LNK2005 Ошибка "аннулируются оператор __cdecl удалить (аннулируются *)" (?? 3 @ YAXPAX @ Z) уже определены в msvcrtd .lib (delete_scalar.obj)
Я не уверен, как заставить мою сборку взять мое глобальное удаление вместо того, что было в библиотеке по умолчанию. Я попытался сделать еще один чистый родной проект, который компилирует DLL и компилирует все мои статические библиотеки в это, а затем накладывает слой взаимодействия на эту DLL. Это работает, но я бы предпочел не иметь 2 слоя клея вместо одного.
Я использую Visual Studio 2015.
Отслеживание памяти приятно, но не перегружает глобальное новое и удаляет простой хак? – Steeve
Вы пытались настроить небольшой тестовый пример, чтобы воспроизвести эту проблему? Одна мысль состоит в том, что у вас разные настройки для библиотеки C++; особенно со статической связью. –