Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / /clr и иже с ним... / 20 сообщений из 20, страница 1 из 1
08.11.2007, 10:02:59
    #34924005
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Навеяно этим .

Что сие есть?
1) Common Language Runtime Support: Common Language Runtime Support (/clr), Pure MSIL Common Language Runtime Support (/clr:pure), Safe MSIL Common Language Runtime Support (/clr:safe),
2) Runtime Library: Multi-threaded (/MT), Multi-threaded DLL (/MD).

Чем различаются 1 и 2? В плане - почему /clr с /MD можно использовать, а вот /clr с /MT низя?
...
Рейтинг: 0 / 0
08.11.2007, 10:41:47
    #34924113
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
/clr - это для .net framework, т.е для managed кода (если не прав спецы поправят я в net не особо)
/MD - для многопоточных exe (dll) с динамической линковкой
/MT - для многопоточных exe (dll) cо статической линковкой

возможно из-за способа сборки (линковки) компонент
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
08.11.2007, 10:50:07
    #34924134
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Cerebrum/clr - это для .net framework, т.е для managed кода (если не прав спецы поправят я в net не особо)

То бишь, если я собираю на своей машине и у меня работает (2000), несу к соседу (ХР), а у него не пашет, значит у меня стот framework, а у него нет? Только из-за этого, или еще у нас могут не совпадать /MD?
Cerebrum
/MD - для многопоточных exe (dll) с динамической линковкой
/MT - для многопоточных exe (dll) cо статической линковкой

возможно из-за способа сборки (линковки) компонент


Я тоже так предположил, но хочется познать глубинный смысл особенностей, почему так... Что это за зайцы такие?
...
Рейтинг: 0 / 0
08.11.2007, 11:39:56
    #34924356
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Akh Cerebrum/clr - это для .net framework, т.е для managed кода (если не прав спецы поправят я в net не особо)

То бишь, если я собираю на своей машине и у меня работает (2000), несу к соседу (ХР), а у него не пашет, значит у меня стот framework, а у него нет? Только из-за этого, или еще у нас могут не совпадать /MD?

вполне возможно, но причем здесь /MD, этот параметр используется при сборке проекта и от этого потом будет зависеть как exe будет работать с dll.

Здесь надо изучать мат часть в плане сборки managed и unmanaged кода в одном проекте, тогда глубинный смысл и дойдет
...
Рейтинг: 0 / 0
08.11.2007, 11:43:50
    #34924375
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
а так же, если ты собираешь с /MD значит экзешник будет зависеть от msvcrt80.dll и других компонент входящих в vcredist, которые твоему соседу придется себе поставить (если у него VS не устанволена)
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
08.11.2007, 11:45:27
    #34924385
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Cerebrum Akh Cerebrum/clr - это для .net framework, т.е для managed кода (если не прав спецы поправят я в net не особо)

То бишь, если я собираю на своей машине и у меня работает (2000), несу к соседу (ХР), а у него не пашет, значит у меня стот framework, а у него нет? Только из-за этого, или еще у нас могут не совпадать /MD?

вполне возможно, но причем здесь /MD, этот параметр используется при сборке проекта и от этого потом будет зависеть как exe будет работать с dll.

Здесь надо изучать мат часть в плане сборки managed и unmanaged кода в одном проекте, тогда глубинный смысл и дойдет

В том то и дело, что dll возможно разные...

Ладно, понятно, /clr -манагед, без /clr - не манагед. Что такое - упровляемость кода (или как правельно)?
...
Рейтинг: 0 / 0
08.11.2007, 11:50:32
    #34924421
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
взято из MSDN
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
/clr
Creates metadata for your application that can be consumed by other CLR applications, and allows your application to consume types and data in the metadata of other CLR components.

For more information, see:

Mixed (Native and Managed) Assemblies

How To: Migrate to /clr

/clr:pure
Produces an MSIL-only output file with no native executable code, although it can contain native types compiled to MSIL.

For more information, see Pure and Verifiable Code.

/clr:safe
Produces an MSIL-only (no native executable code) and verifiable output file. /clr:safe enables verification diagnostics (PEVerify Tool (Peverify.exe)).

For more information, see Writing Verifiably Type-Safe Code.

/clr:oldSyntax
Enables Managed Extensions for C++ syntax, the original Visual C++ syntax for CLR programming.

Note   Managed Extensions for C++ syntax is deprecated in Microsoft Visual C++  2005 . You should use /clr:oldSyntax only if you are maintaining a Visual C++ application that uses Managed Extensions for C++. If you are developing a new application, use the updated syntax; see New Language Features in Visual C++ for more information.

If you have a Managed Extensions for C++ application, you can begin to port your project to use the new syntax; see Porting and Upgrading Programs for more information.

/clr:noAssembly
The noAssembly option specifies that an assembly manifest should not be inserted into the output file. By default, the noAssembly option is not in effect.

Note   The noAssembly option is deprecated in Visual C++  2005 . Use /LN (Create MSIL Module) instead. For more information, see Deprecated Compiler Options in Visual C++  2005 .

A managed program that does not have assembly metadata in the manifest is called a module. The noAssembly option can be used only to produce a module. If you compile with /c (Compile Without Linking) and /clr:noAssembly, then specify the /NOASSEMBLY (Create a MSIL Module) option in the linker phase to create a module.

Before Visual C++  2005 , /clr:noAssembly implied /clr. However, /clr now also supports /clr:oldSyntax, so you must specify one /clr form when you specify /clr:noAssembly. For example, /clr:noAssembly /clr creates a module using the new Visual C++ CLR syntax and /clr:noAssembly,oldSyntax creates a module using Managed Extensions for C++.

Before Visual C++  2005 , /clr:noAssembly required /LD. /LD is now implied with you specify /clr:noAssembly.

/clr:initialAppDomain
Allows a Visual C++ application to run on version  1  of the common language runtime. If you use initialAppDomain, then you may see some of the problems discussed in Knowledge Base article Q309694. 

вообще об этом много написано, можно в википедии глянуть или погуглить
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
08.11.2007, 12:06:28
    #34924501
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Cerebrum

Фенкс. Тогда такой вариант - managed линкует свою часть реализации Runtime Library С++ (например, выделение памяти необходимое для совместной работы c++/cli и c++ находится в c++/cli), что не позволяет линковаться с ней, и возможно использование только подгружая c++ при запуске программы (откуда выкалупываются используемые средства в программе).
...
Рейтинг: 0 / 0
08.11.2007, 12:11:56
    #34924531
Cerebrum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
clr создает прослойку - метаданные, возможно оттуда
--------------------------------------------------------------
[не претендую на уникальность]
...
Рейтинг: 0 / 0
08.11.2007, 13:12:32
    #34924819
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Akh wrote:
>
> Что сие есть?
> 1) Common Language Runtime Support: Common Language Runtime Support
> (/clr), Pure MSIL Common Language Runtime Support (/clr:pure), Safe MSIL
> Common Language Runtime Support (/clr:safe),

/clr - генерация смешанного кода MSIL+native, линкуется с msvcm80.dll,
которая, в свою очередь, слинкована с msvcr80.dll.
/clr:pure - генерация только MSIL кода, линкуется с msvcm80.dll
/clr:safe - то же, что и /clr:safe но добавляет информацию для проверки
типов.

> 2) Runtime Library: Multi-threaded (/MT), Multi-threaded DLL (/MD).

/MT - использование мультипоточной статической библиотеки libcmt.lib
/MD - использование мультипоточной динамической библиотеки msvcr80.dll

>
> Чем различаются 1 и 2? В плане - почему /clr с /MD можно использовать, а
> вот /clr с /MT низя?

По той-же причине - при использовании msvcr80.dll все приложения,
слинкованные с ней, работают с единым состоянием CRT - например,
используют один хип (это значит, что можно спокойно вызывать
malloc/realloc/free в любом месте), одну настройку локали, работа с
файлами (причем верхнего[fopen] и нижнего[open] уровня) и т.д.

Если же форсировать использование /MT (/NODEFAULTLIB), то нельзя будет
смешивать вызовы, зависящие от состояния, сохраненного в самой
библиотеке. А таких вызовов - гораздо больше, чем кажется на первый
взгляд (часть я уже перечислил).
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
08.11.2007, 13:51:25
    #34925015
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
teras

Угумс. Понятно. Тогда еще вопрос: почему на разных компьютерах не запускаются приложения слинкованные с msvcr80.dll? Ведь для достижения этой цели приходиться использовать libcmt.lib, заведомо обрекая на невозможность MSIL-кода.

И еще тогда появляется вопрос: названия библиотек времени выполнения: Multi-threaded, Multi-threaded DLL имеют какой либо глубинный смысл, или они просто отражают расширение библиотеки lib или dll, хотя кажется наиболее важным тип библиотеки для managed или не для managed, тем более что они все равно линкуются? Понятно, что в названиях пути господни неисповедимы, но может я чего-то всетаки не догоняю?
...
Рейтинг: 0 / 0
08.11.2007, 22:56:08
    #34926579
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Akh wrote:
>
> Угумс. Понятно. Тогда еще вопрос: почему на разных компьютерах не
> запускаются приложения слинкованные с msvcr80.dll? Ведь для достижения
> этой цели приходиться использовать libcmt.lib, заведомо обрекая на
> невозможность MSIL-кода.

Не понял вопроса. Не запускаются приложения зависящие от msvcr80.dll? А
libcmt.lib приходится использовать чтобы все таки запустилось? Да?

Какое сообщение появляется? На чем приложение написано? Если на C++,
нужно еще msvcp80.dll.

>
> И еще тогда появляется вопрос: названия библиотек времени выполнения:
> Multi-threaded, Multi-threaded DLL имеют какой либо глубинный смысл, или
> они просто отражают расширение библиотеки lib или dll, хотя кажется
> наиболее важным тип библиотеки для managed или не для managed, тем более
> что они все равно линкуются? Понятно, что в названиях пути господни
> неисповедимы, но может я чего-то всетаки не догоняю?

Библиотеки всегда делились по трем параметрам -
multi-threaded/single-threaded, static/dll, release/debug.

ИМХО, так, как исторически первой версией библиотеки была
single-threaded static - она называлась просто libc. Затем ввели
поддержку многопоточности и dll, но старые названия сохранили для
совместимости, в том числе - и неупоминание static в противоположность dll.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.11.2007, 10:28:34
    #34927147
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
teras
Akh wrote:
>
> Угумс. Понятно. Тогда еще вопрос: почему на разных компьютерах не
> запускаются приложения слинкованные с msvcr80.dll? Ведь для достижения
> этой цели приходиться использовать libcmt.lib, заведомо обрекая на
> невозможность MSIL-кода.

Не понял вопроса. Не запускаются приложения зависящие от msvcr80.dll? А
libcmt.lib приходится использовать чтобы все таки запустилось? Да?

Какое сообщение появляется? На чем приложение написано?


Приложение не запущено, поскольку оно не корректно настроено. Повторная установка может исправить эту проблему.

На C++. На обычном, я так понял он называется Native.

teras
Если на C++, нужно еще msvcp80.dll.


А это что за зверь? Его тоже нужно подлинковать какой-то опцией?

Получаются такие схемы:
Native C++: Mutithread Library (libcmt)
C++/CLI: /clr:pure or /clr:safe (msvcm)
Native C++ + C++/CLI: /clr + Mulithread Library DLL + еще что то ??? (msvcm + msvcr + msvcp)


teras
> И еще тогда появляется вопрос: названия библиотек времени выполнения:
> Multi-threaded, Multi-threaded DLL имеют какой либо глубинный смысл, или
> они просто отражают расширение библиотеки lib или dll, хотя кажется
> наиболее важным тип библиотеки для managed или не для managed, тем более
> что они все равно линкуются? Понятно, что в названиях пути господни
> неисповедимы, но может я чего-то всетаки не догоняю?

Библиотеки всегда делились по трем параметрам -
multi-threaded/single-threaded, static/dll, release/debug.

ИМХО, так, как исторически первой версией библиотеки была
single-threaded static - она называлась просто libc. Затем ввели
поддержку многопоточности и dll, но старые названия сохранили для
совместимости, в том числе - и неупоминание static в противоположность dll.

Ход мыслей ясен. Фенкс.
...
Рейтинг: 0 / 0
09.11.2007, 10:29:47
    #34927154
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Забыл ответить:

teras
Не понял вопроса. Не запускаются приложения зависящие от msvcr80.dll? А
libcmt.lib приходится использовать чтобы все таки запустилось? Да?


Именно так. Этот совет я встречал по всюду.
...
Рейтинг: 0 / 0
09.11.2007, 10:58:31
    #34927280
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
AkhНавеяно этим .

Что сие есть?
1) Common Language Runtime Support: Common Language Runtime Support (/clr), Pure MSIL Common Language Runtime Support (/clr:pure), Safe MSIL Common Language Runtime Support (/clr:safe),
2) Runtime Library: Multi-threaded (/MT), Multi-threaded DLL (/MD).

Чем различаются 1 и 2? В плане - почему /clr с /MD можно использовать, а вот /clr с /MT низя?

/clr попытка микрософта привязять свободный си к платформе микрофоста, сделать фактически некросплатформенный си. в частности, цонечный код может легко конвертиться в си_диез или VBнет.

фтопку /clr, ибо с ним гемора не оберешся
...
Рейтинг: 0 / 0
09.11.2007, 17:24:31
    #34929108
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Akh wrote:
>
>> Если на C++, нужно еще msvcp80.dll.
>
> А это что за зверь? Его тоже нужно подлинковать какой-то опцией?

Реализация стандартной библиотеки C++ (потоки, контейнеры, исключения и
т.п). shared vs static выбирается той-же опицей /MD и /MT.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.11.2007, 17:39:28
    #34929156
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
teras
Akh wrote:
>
>> Если на C++, нужно еще msvcp80.dll.
>
> А это что за зверь? Его тоже нужно подлинковать какой-то опцией?

Реализация стандартной библиотеки C++ (потоки, контейнеры, исключения и
т.п). shared vs static выбирается той-же опицей /MD и /MT.

Posted via ActualForum NNTP Server 1.4

Ну, так вот с /MT (libcmt) она запускается, но использование с c++/cli тогда не возможно. C /MD (msvcr) использование c++/cli возможно, но не запускается на других компьютерах.

Так что же получается? Не возможно собрать переносимое приложение Native C++ + C++/CLI? Т.е. managed будет не возможно перенести с 2000 на XP?
...
Рейтинг: 0 / 0
09.11.2007, 17:49:31
    #34929197
teras
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
Akh wrote:

> Ну, так вот с /MT (libcmt) она запускается, но использование с c++/cli
> тогда не возможно. C /MD (msvcr) использование c++/cli возможно, но не
> запускается на других компьютерах.
>
> Так что же получается? Не возможно собрать переносимое приложение Native
> C++ + C++/CLI? Т.е. managed будет не возможно перенести с 2000 на XP?

Почему, все можно. Манифест генерируется? vcredist от соответствующей
версии VC не помогает? Как не запускается, что происходит, что говорит?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
09.11.2007, 18:05:20
    #34929240
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
terasПочему, все можно. Манифест генерируется? vcredist от соответствующей
версии VC не помогает? Как не запускается, что происходит, что говорит?

Ууууу... нафиг. Тут еще огород не пахан. Ладно, спасибо за консультации. Безмерно благодарен. Просветил в VC и cli. Теперь я знаю кучу модных слов. А то все, gcc, gcc... ;)
...
Рейтинг: 0 / 0
09.11.2007, 19:34:33
    #34929447
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
/clr и иже с ним...
дык наверно с приложением надо эти дллки поставлять, компиль с++/сли с рантайм-дллкой, ложи msvcp80.dll, msvcr80.dll, mscvm80.dll до кучи в папку с приложением (можно этим и не ограничиться, ещё чего-нить пихнуть, убрать всегда успеешь), должно заработать. И по возможности используй визард для создания каркаса приложения, чтобы он за тебя все необходимые пляски с бубном станцевал.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / /clr и иже с ним... / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]