2013-08-07 2 views
3

Я хочу скомпилировать и связать свой проект в Visual Studio 2008 как проект отладки (MTd). Этот проект включает в себя несколько внешних DLL, и одна из этих DLL - это как версия без отладки (версия MD и MT). Теперь, если я попытаюсь связать свой проект, он либо говорит о переделке содержимого в LIBCMT.lib и LIBCMTD.lib, либо если я попытаюсь не разрешить не-отладочную версию (/ NODEFAULTLIB: LIBCMT), у нее отсутствуют символы.Visual Studio C++ - ссылка LIBCMT.lib и LIBCMTD.lib (версия отладки)

Теперь я мог бы использовать версию MT всех внешних библиотек, но я все еще не могу скомпилировать & ссылку на нее как версию MTd для отладки моего проекта из-за тех же ошибок.

Альтернативным способом (на мой взгляд) было бы дать возможность переопределения, которое, по моему мнению, возможно @ gnu compiler/linker, но я ничего не мог найти об этом для C++ visual studio.

Любые идеи о том, как справиться с этой проблемой? (Помните: невозможно скомпилировать внешние DLL как debug-dll)

В качестве дополнительного общего вопроса: возможно ли создать отладочный проект, в котором используется не-debug-dll?

+3

Вы пытаетесь умышленно использовать * несколько * версий CRT в своей программе. Вы получите один для своего EXE, а другой для своих DLL, возможно, больше. Это очень, очень неразумно, у вас будут серьезные проблемы с передачей объектов и указателей между ними. Используйте/MD последовательно, так что в программе есть только один CRT. –

+0

Да, это неразумно и необходимо ... потому что мне нужен проект для отладки и просто есть версии некоторых внешних DLL-версий. Для сборки релизов это всегда согласовано. –

+1

Вам нужно поговорить с программистами, которые работали над этими DLL. Конечно, они могут предоставить вам отладочную сборку. Вряд ли вы найдете их здесь. –

ответ

3

Похоже, что «правильным» решением было бы восстановить все внешние библиотеки с теми же параметрами (MTd). Как я уже сказал, это невозможно. Я решил проблему, не игнорируя никаких значений по умолчанию. Вместо этого я нашел параметр, который я искал. В вариантах компоновщика - дополнительные строки я добавил: /FORCE - который игнорирует переопределение символов. Это не идеальное решение, и возможно, что это не сработает ни для какого проекта, но это все же лучше, чем ничего ...

Кроме того, мне пришлось установить инкрементную ссылку на NO, иначе embed.manifest выиграл ' t правильно (хотя я читал, что это также может быть проблемой против вируса).

Смежные вопросы