Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
bedvit
449 / 157 / 18
Регистрация: 20.05.2016
Сообщений: 618
Записей в блоге: 6
#1

Производительность библиотеки - динамическая/статистическая (Debug/Release)

19.01.2018, 11:10. Просмотров 293. Ответов 17
Метки нет (Все метки)

Всем привет!
Собираю библиотеку для работы с числами для другого своего проекта, вопрос знатокам:
1.Как лучше ее скопмпилировать в динамическую, статистическую, какая быстрее? Читал, что статистическая, т.к. встраивается в проект.
2.Есть ли разница в том, как её компилировать в Debug или Release, если далее она будет встраиваться в проект (если статистическая) и уже в проекте выставляется Release (не останется ли меток под точки останова и т.д., которые будут замедлять работу библы в проекте, если библа - Debug, и будет ли работать отладчик - если библа Release).

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2018, 11:10
Ответы с готовыми решениями:

Release/Debug
Здравствуйте! Пишу сложную расчётную программу. И мне важна скорость выполнения...

Debug и Release разница?
объяснить пожалуйста разница между Debug И Release? и почему после компиляции...

Release работает, Debug - ошибка
Подскажите, товарищи. Есть код (взял с форума) : #include <iostream>...

difference between debug and release MVS2010
Ума не приложу в какую сторону копать:read: Следующий фрагмент кода, в Дебаге...

Неопределенное поведение в Debug и Release
Писал программу для сложения больших чисел (в файле содержатся числа с...

17
hoggy
Заблокирован
Эксперт С++
19.01.2018, 18:08 #2
Цитата Сообщение от bedvit Посмотреть сообщение
Как лучше ее скопмпилировать в динамическую, статистическую
что лучше: легковая машинка, или грузовая?
Цитата Сообщение от bedvit Посмотреть сообщение
Читал, что статистическая, т.к. встраивается в проект.
плохо читали.
читайте ещё.
Цитата Сообщение от bedvit Посмотреть сообщение
Есть ли разница в том, как её компилировать в Debug или Release
есть.

по уму, компиляют и дебаг и релиз.
к дебажной сборке проекта подключают дебаг.
к релзной - релиз.

Цитата Сообщение от bedvit Посмотреть сообщение
и будет ли работать отладчик - если библа Release).
релиз отладчиком не отлаживают.
0
COKPOWEHEU
902 / 664 / 151
Регистрация: 09.09.2017
Сообщений: 2,863
20.01.2018, 10:24 #3
Самописную библиотеку почти всегда удобнее линковать статически, а еще лучше делать даже не библиотеку а просто объектный файл. Заменять отдельно ее (по соображениям безопасности, обновления и т.п.) не требуется, сторонних зависимостей на нее в ближайшее время не будет. А когда появятся, можно и вынести в разделяемую.
По скорости работы статическая линковка чуть-чуть лучше, но разница настолько мала, что даже стандартная со статической линковкой libc никто не заморачивается.
Различие релизной версии от дебажной в том что в последнюю встроены отладочные символы, проверки и тому подобное. Как ни странно, отладочная сборка предназначена для разработки и отладки, а релизная - для использования.
0
bedvit
449 / 157 / 18
Регистрация: 20.05.2016
Сообщений: 618
Записей в блоге: 6
20.01.2018, 12:03  [ТС] #4
Цитата Сообщение от hoggy Посмотреть сообщение
релиз отладчиком не отлаживают.
имел ввиду релиз - библа, Debug - проект.
Цитата Сообщение от hoggy Посмотреть сообщение
по уму, компиляют и дебаг и релиз.
по уму то да, думал сократить кол-во версий (еще и х32, х64 ведь) итого 4 библы выходит по уму
Цитата Сообщение от hoggy Посмотреть сообщение
плохо читали.
читайте ещё.
Всегда думал, что при динамической компоновке код библиотеки помещается во внешний модуль (dll), связывание с
которым происходит на этапе выполнения. При статической компоновке код библиотеки собирается вместе с клиентским кодом, как одно целое. По вашему это не так?
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
объектный файл
- отмечу себе как вариант, надо поднять матчасть.
0
COKPOWEHEU
902 / 664 / 151
Регистрация: 09.09.2017
Сообщений: 2,863
20.01.2018, 14:13 #5
Цитата Сообщение от bedvit Посмотреть сообщение
- отмечу себе как вариант, надо поднять матчасть.
Ну обычно когда вы собираете проект из нескольких исходников. Каждый из них сначала компилируется в объектный файл (*.o) а потом они все вместе, плюс статические библиотеки, линкуются в бинарник.
А в простых случаях вообще достаточно оформить библиотеку в виде одного заголовочного файла (*.h), который будет встраиваться прямо в main.
0
hoggy
Заблокирован
Эксперт С++
20.01.2018, 18:07 #6
Цитата Сообщение от bedvit Посмотреть сообщение
имел ввиду релиз - библа, Debug - проект.
технически - это возможно.
так делают либо от безысходности в надежде, что взлетит.
либо ... так делают не очень корректно-грамотные люди.

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

Цитата Сообщение от bedvit Посмотреть сообщение
думал сократить кол-во версий (еще и х32, х64 ведь) итого 4 библы выходит по уму
не над ничего сокращать.
сколько нужно версий - столько и должно их быть.
у курла свыше 12 различных конфигураций сборки и это - без учета дебаг/релиз,
например.

ну и что?

у вас есть проект проекта)
и есть проект библиотеки.

просто собирайте и то, и другое в одной конфигурации.
и будет вам счастье.

Цитата Сообщение от bedvit Посмотреть сообщение
Всегда думал, что при динамической компоновке код библиотеки помещается во внешний модуль (dll), связывание с
которым происходит на этапе выполнения. При статической компоновке код библиотеки собирается вместе с клиентским кодом, как одно целое. По вашему это не так?
ну и как это по вашему влияет на производительность?)
0
COKPOWEHEU
902 / 664 / 151
Регистрация: 09.09.2017
Сообщений: 2,863
20.01.2018, 19:15 #7
Цитата Сообщение от bedvit Посмотреть сообщение
по уму то да, думал сократить кол-во версий (еще и х32, х64 ведь) итого 4 библы выходит по уму
Выделяете отдельный каталог для каждой сборки и они не будут путаться. Скажем, ./bin/debug_lin32/ ./bin/release_win64/ и т.д.
Цитата Сообщение от hoggy Посмотреть сообщение
ну и как это по вашему влияет на производительность?)
Это вопрос с подвохом для ТСа?)
0
bedvit
449 / 157 / 18
Регистрация: 20.05.2016
Сообщений: 618
Записей в блоге: 6
21.01.2018, 00:17  [ТС] #8
Цитата Сообщение от hoggy Посмотреть сообщение
ну и как это по вашему влияет на производительность?)
Это ответ на ваш комментарий
Цитата Сообщение от hoggy Посмотреть сообщение
Сообщение от bedvit
Читал, что статистическая, т.к. встраивается в проект.
плохо читали.
читайте ещё.
- посчитал, что вы возражаете на этот момент (встройки в проект).
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
виде одного заголовочного файла (*.h),
- да это удобно в некоторых случаях.
Цитата Сообщение от hoggy Посмотреть сообщение
просто собирайте и то, и другое в одной конфигурации.
почти так и делаю, макрос в компиляторе берет нужную папку для нужной конфигурации. Был интересен именно момент работы отладчика в Debug-конфигурации проекта с Release библой. И наоборот - скорость кода в Release-конфигурации проекта с Debug библой.
Цитата Сообщение от hoggy Посмотреть сообщение
у курла свыше 12 различных конфигураций сборки и это - без учета дебаг/релиз,
- жесть!

Добавлено через 5 минут
Зачем столько?

Добавлено через 7 минут
Получится ли запихать несколько классов, шаблоны, перегрузки и т.д. в один (*.h) - шаманство

Добавлено через 13 минут
Мысли вслух: если статистическая библа компилится в мой Release-проект, можно ведь пользоваться и Debug-библой, компилятор в релиз версии все отладочные символы и т.д. уберет, в т.ч. и в коде встраиваемой в проект библы (но не сможет в динамической dll)? Или где-то упускаю?
0
COKPOWEHEU
902 / 664 / 151
Регистрация: 09.09.2017
Сообщений: 2,863
21.01.2018, 00:23 #9
Цитата Сообщение от bedvit Посмотреть сообщение
Получится ли запихать несколько классов, шаблоны, перегрузки и т.д. в один (*.h) - шаманство
Лучше так не делать. Не зря умные люди придумали модульное программирование и разделяемые объекты. Впрочем, если хочется проверить лоб на граблеустойчивость - удачи.
Цитата Сообщение от bedvit Посмотреть сообщение
Мысли вслух: если статистическая библа компилится в мой Release-проект, можно ведь пользоваться и Debug-библой, компилятор в релиз версии все отладочные символы и т.д. уберет, в т.ч. и в коде встраиваемой в проект библы (но не сможет в динамической dll)? Или где-то упускаю?
debug версия это не только отладочные символы, но и макросы, отладочный вывод. Простая линковка объектных файлов чем не устраивает?
0
bedvit
449 / 157 / 18
Регистрация: 20.05.2016
Сообщений: 618
Записей в блоге: 6
21.01.2018, 00:54  [ТС] #10
Пока не могу сказать чем Не за рабочим станком (пишу с планшета). Возможно вариант. Объектные файлы тоже Debug/Release?

Добавлено через 3 минуты
И как все стандартные библы они все Debug или Release? Или каждой по две?
0
COKPOWEHEU
902 / 664 / 151
Регистрация: 09.09.2017
Сообщений: 2,863
21.01.2018, 01:51 #11
Цитата Сообщение от bedvit Посмотреть сообщение
Возможно вариант. Объектные файлы тоже Debug/Release?
А объектные файлы линкуются вместе с основным кодом, примерно как статические библиотеки, только попроще.
Цитата Сообщение от bedvit Посмотреть сообщение
И как все стандартные библы они все Debug или Release? Или каждой по две?
Иногда к ним отдельно идут отладочные символы. Например, пакеты
libsdl2 - библиотека для конечного пользователя
libsdl2-dev - набор файлов разработчика: заголовочные файл и статические библиотеки
libsdl2-dbg - отладочные символы
Другое дело, а нужно ли вам отлаживать стандартные библиотеки? Шанс найти в них ошибку крайне мал, ведь их отлаживали куда более умные люди.
1
bedvit
449 / 157 / 18
Регистрация: 20.05.2016
Сообщений: 618
Записей в блоге: 6
22.01.2018, 18:11  [ТС] #12
Т.е. если Библа отлаженная (на других проектах), то релиз библу можно включать и в дебаг и релиз проект. В дебаг-проекте просто не будет в библе отладки.

Добавлено через 8 часов 21 минуту
верно?

Добавлено через 3 минуты
Пока так и не понял, если статистическая библа компилится в мой Release-проект, можно ведь пользоваться и Debug-библой, компилятор в релиз версии все отладочные символы и т.д. уберет, и проект и библа выйдет Release (в отличии от динамической dll)? Или где-то упускаю?
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,472
22.01.2018, 18:28 #13
Цитата Сообщение от bedvit Посмотреть сообщение
2.Есть ли разница в том, как её компилировать в Debug или Release
В дебаг-сборке обычно отключаются все оптимизации и включаются все отладочные assert. А в релизе - наоборот. Так что да, разница в производительности будет, релиз по умолчанию быстрее.
0
bedvit
449 / 157 / 18
Регистрация: 20.05.2016
Сообщений: 618
Записей в блоге: 6
22.01.2018, 18:37  [ТС] #14
Renji, это понятно. Вопрос про статистическую Debug-библу, которая встраивается в Release-проект. Если библа встраивается, компилятор сам почистит всю отладку(удалит) в конечном проекте, верно?
0
hoggy
Заблокирован
Эксперт С++
22.01.2018, 19:42 #15
Цитата Сообщение от bedvit Посмотреть сообщение
в конечном проекте, верно?
не верно.

нужно быть настоящим извращенцем ценителем исскуства,
что бы релиз линковать с тормозной библиотекой.
0
Renji
2102 / 1543 / 470
Регистрация: 05.06.2014
Сообщений: 4,472
22.01.2018, 21:23 #16
Цитата Сообщение от bedvit Посмотреть сообщение
Если библа встраивается, компилятор сам почистит всю отладку(удалит) в конечном проекте, верно?
Максимум что он может удалить это отладочные символы (грубо говоря, информация как какая переменная называлась). Сам отладочный код где был, там и останется.
0
bedvit
449 / 157 / 18
Регистрация: 20.05.2016
Сообщений: 618
Записей в блоге: 6
23.01.2018, 09:49  [ТС] #17
Была мысль, что если сомвол _DEBUG в релиз версии проекта не определён, то и отладочный код не будет забирается из дебаг-библы,
зайдет только исполняемый код (библа статистическая, про динамическую dll - здесь таки да, отладка будет). По возможности посмотрю - что выходит.
0
COKPOWEHEU
902 / 664 / 151
Регистрация: 09.09.2017
Сообщений: 2,863
23.01.2018, 11:50 #18
символ _DEBUG разбирается при компиляции а не линковке.
0
23.01.2018, 11:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2018, 11:50

В чем разница между Debug and Release?
Какие действия выполняет debug в Visual studio и какие Release, в чем разница?...

Debug и Release сборки в Visual Studio
Я начал писать проект на c++ с использованием sfml. При сборке тестовой...

Кодировка в режиме сборки Debug / Release
В проекте использую только Use Multi-Byte Character Set, то есть ASCII. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru