Как библиотека стандарта C++ связана с моим приложением?

Ответ, который дал Chris, работает просто великолепно. Я протестировал, и это работало на меня. Можно инстанцировать класса в XAML (в UserControl. Ресурсы), и затем связывают datacontext со статическим ресурсом.

Следуют за кодом:


<UserControl ...>
    <UserControl.Resources>
       <myNS:MyClass x:Name="TheContext" x:Key="TheContext"></myNS:MyClass>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource TheContext}" >
        <TextBlock Text="{Binding Path=Field1}">
        </TextBlock>
    </Grid>
</UserControl>

5
задан Lawand 30 September 2009 в 23:22
поделиться

5 ответов

Нет, стандартные библиотеки по умолчанию динамически подключаются во время выполнения.

При запуске динамический загрузчик будет искать в нескольких стандартных местах динамические библиотеки, если обнаружит, что загружается, и запускается в противном случае приложение закрывается.

В системах Unix:
/ usr / lib: ищите: libstdc ++ *

В Windows:
c: \ windows \ system32 ищите: MSVCRT.DLL

Есть также пара переменных среды, которые могут влиять на путь поиска. Посмотрите справочную страницу вашей платформы для dlopen, чтобы узнать, что это такое. Все, что вам нужно, должно быть на страницах руководства для dlopen на вашей платформе.

Большинство систем имеют эти библиотеки в соответствующих местах и ​​будут найдены автоматически.
Остальная часть STL не вводит дополнительных общих зависимостей библиотек.

11
ответ дан 18 December 2019 в 06:36
поделиться

В последних версиях MinGW gcc / g ++ (4.40) вы можете ссылаться на общую dll вместо статической библиотеки по умолчанию, используя флаг -shared-libstdc ++.

Статические версии библиотеки находятся в / mingw / lib / gcc / mingw32 / [версия gcc]. Имя файла - libstdc ++. A. Он будет связан по умолчанию при компиляции приложения C ++ с помощью MinGW.

7
ответ дан 18 December 2019 в 06:36
поделиться
​​

Единственная базовая зависимость времени выполнения для программ MinGW C ++ находится на MSVCRT.DLL. Другие зависимости будут зависеть от того, что на самом деле делает ваша программа - например, если она использует подключение к базе данных ODBC, она будет зависят от ODBC32.DLL (и, возможно, некоторых других DLL Windows). Однако использование таких классов, как std :: string или std :: vector в программе MinGW C ++ не приведет к появлению новых зависимостей динамических библиотек.

Если вас беспокоят зависимости динамических библиотек, проверьте инструмент "Dependency Walker" на http://www.dependencywalker.com/

3
ответ дан 18 December 2019 в 06:36
поделиться

По большей части это все в файлах заголовков, потому что они сильно шаблонизированы. libstdc ++ требует очень немногое, поэтому ( iostream , может быть, я думаю).

2
ответ дан 18 December 2019 в 06:36
поделиться

Библиотеки времени выполнения C и C ++ связаны так же, как и обычные библиотеки, основные разница в том, что они обычно автоматически компилируются и связываются компилятором и компоновщиком без необходимости их указывать.

Однако обобщать, что вам не нужно поставлять их вместе с вашим приложением, неверно. В большинстве случаев, когда вы отправляете динамически связанные двоичные файлы, вам нужно будет включить их, например, если вы компилируете с MSVC ++, вы будете связывать все, что установлено на вашем компьютере сборки, если вы установите динамически связанный двоичный файл при новой установке Windows, вы могут возникнуть проблемы, если вы не убедитесь, что библиотеки включены как часть установочного пакета (см. документацию о распространяемых файлах Visual Studio). То же самое и на машинах Solaris (стандартные библиотеки обновляются как часть набора исправлений). В Linux все сложнее, вы не можете связывать статически из-за GPL, однако библиотеки обычно устанавливаются через пакеты дистрибутива.

1
ответ дан 18 December 2019 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: