Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > вопрос по линковке |
Автор: mrgloom 26.6.2012, 11:42 |
допустим в code generation я в проекте проставляю /MT т.е. статическая линковка. и либы подключаю предназначенные для /MD(т.е. динамическая линковка) всё компилируется без ошибок почему компилируется без ошибок? будут ли проблемы потом? |
Автор: Randajad 26.6.2012, 12:09 |
Возможно, линковщик исправляет это досадное недоразумение и назначает им статическую линковку. Вывод ошибок не подавлен? Обычно, ругается, во всяком случае у меня ругалось. Проблемы могут быть. Лучше так не делать, чтобы не получать сюрпризов в будущем. ![]() И, да, компилируется - так некорректно говорить. Компилируются исходники. Можно их компилировать как угодно. Создает дллки/экзешки - линкер. Он занимается линковкой. |
Автор: baldina 26.6.2012, 12:44 |
если используется то, что одинаково в MT и MD a) интерфейсно, то проблем с линковкой не будет б) реализовано, то проблем с работой не будет однако такие эксперименты проводить таки не стоит |
Автор: mrgloom 26.6.2012, 14:31 |
а если у меня есть либа собранная не мной, то как мне определить её тип? возможно ли подключить часть библиотек статически, а часть динамически? |
Автор: mrgloom 27.6.2012, 08:44 | ||||
а не подскажете как это делается в vs2008? а то я пользуюсь только параметром code generation.
а это как? |
Автор: baldina 27.6.2012, 10:00 | ||
поместите это в библиотеку, и линкуйте на здоровье с чем угодно: оно не зависит от стандартной библиотеки Добавлено через 3 минуты и 10 секунд в разделе Linker есть параметр Input. там вы указываете библиотеки с которыми надо линковать. часть библиотек может быть полноценными (статическими), часть - заглушками для dll. Есть и другие способы - #pragma comment(lib, "libfilename") , установка Project Dependencies |
Автор: mrgloom 27.6.2012, 16:44 | ||||
не понял о чём вы.
это я и так делаю. |
Автор: mrgloom 28.6.2012, 10:10 |
опять не понятен момент с линковкой, допустим я opencv собрал статически и подключил, и хочу подключить ещё python динамически,это реально? настройки проекта, то вроде как распространяются на все библиотеки в него подключаемые? |
Автор: Randajad 28.6.2012, 10:41 |
Не путайте вещи. Статически - это статическая библиотека, в итоге она интегрируется в ваше приложение. Динамически - это DLL, она будет отдельно от вашего приложения. Вы же говорите про то, как линковать CRT. CRT - это библиотека, которая нужна всегда. Проблемы возникают только тогда, когда вы решаете собрать свое приложение с /MT и статическую библиотеку, которую использует ваше приложение, с /MD. |
Автор: mrgloom 28.6.2012, 11:39 | ||||||
что то я совсем запутался т.е. как линковать CRT это параллельно тому какие я должен подключать библиотеки?(собранные статически или динамически) LIBCPMT.LIB Multithreaded, static link MSVCPRT.LIB Multithreaded, dynamic link (import library for MSVCP80.dll) /MD т.е. их как бы нельзя смешивать они взаимоисключаемые? + непонятно откуда потом программа берёт MSVCP80.dll, она стандартная входит в винду? У меня есть главная программа .exe собирается с boost,opencv,fftw статически и есть модуль расширение .dll куда opencv подключается статически и подключается питон динамически. но если так пробовать собирать, то выдаются ошибки типа
т.е. я так понимаю LIBCPMT.LIB и MSVCPRT.LIB конфликтуют. |
Автор: xvr 28.6.2012, 12:27 | ||
Будут проблемы, но не с питоном, а с opencv - она у вас попадет в вашу программу дважды (один раз в составе exe, а второй раз - в составе модуля расширения dll) Угу В первой ошибке - передрались сборки opencv. Вторая - вообще непонятно что, похоже вы сказали линковать с LIBCPMT.LIB и MSVCPRT.LIB одновременно |