С какими библиотеками мне нужно связать мое приложение в смешанном режиме? - PullRequest
1 голос
/ 13 августа 2008

Я интегрирую поддержку .NET в наше приложение C ++.
Это приложение MFC старой школы, с 1 дополнительным файлом, скомпилированным с параметром "/ clr", который ссылается на CWinFormsControl.

Мне не разрешено удалять флаг компоновщика "/ NODEFAULTLIB".
(У нас есть собственная система управления сборкой, а не Visual Studio.)
Это означает, что я должен указать все необходимые библиотеки: VC runtime и MFC.

Другие опции компилятора включают "/ MD"

Далее: я не могу использовать флаг компоновщика "/ FORCE: MULTIPLE" и просто добавить все :
Я ищу непересекающийся набор библиотек.

Ответы [ 3 ]

1 голос
/ 14 августа 2008

Используйте AppWizard для создания простого приложения MFC в своем стиле (SDI / MDI / диалоговое окно), а затем наденьте свою зависимость .

1 голос
/ 14 августа 2008

Как я это решил:

  1. свяжите с "/ FORCE: MULTIPLE / verbose" (это нормально связывает) и отложите вывод в сторону.
  2. свяжите с "/ NODEFAULTIB / verbose" и проследите все нерешенные проблемы в выходных данных предыдущего шага и добавьте библиотеки 1 на 1.
  3. В результате получилось двойное число: «AAA.lib: XXX уже определено в BBB.lib»
  4. Тогда я наконец понял: Перекомпилированные управляемые и неуправляемые модули с / MD и ссылка на (среди прочего): mscoree.lib msvcmrt.lib mfcm80d.lib

Смешивание / MT (неуправляемый) и / MD (управляемый) оказалось плохой идеей: нужны разные (перекрывающиеся) библиотеки.

@ ajryan: Dependcy Walker только говорит мне, какие библиотеки используются, а не то, с какими библиотеками связаны ссылки. (например, msvcmrt.lib?) Я думаю.

Спасибо за ответы!

Jan

1 голос
/ 13 августа 2008

Как минимум:

mscoree.lib msvcrt.lib mfc90.lib (настроить версию соответствующим образом)

И итерация оттуда.

...