Russian Qt Forum
Ноябрь 23, 2024, 08:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нюансы сборки  (Прочитано 2956 раз)
ksergey85
Гость
« : Октябрь 02, 2014, 12:26 »

Здравствуйте.
Приложение состоит из нескольких проектов - основной проект и статические библиотеки. В одной из статических библиотек есть .cpp-модуль следующего содержания:
Код:
#include <QDir>

bool init()
{
Q_INIT_RESOURCE(myqrc);

return true;
}
const bool inited = init();

Замысел в том, чтобы вызвать функцию init() сразу после загрузки программы в память (на этапе инициализации глобальных переменных). Замечу, что переменная inited нигде (ни в коде этой библиотеки, ни в коде других библиотек или основной программы) не используется. В итоге понял, что данный модуль в программный код после сборки прилоги просто не попадает, так как под отладчиком не срабатывают бряки ни на строке с объявлением переменной, ни на строках тела функции. После добавления в модуль любого кода, используемого за его пределами, переменная начинает "срабатывать". Все тесты проводил на отладочной (Debug) сборке.
Вопрос: имеет ли здесь место какая то оптимизация и как ее отключить? Если нет, то в чем дело?
Среда сборки: MSVS2013, версия Qt: 5.3.1.
Записан
Bepec
Гость
« Ответ #1 : Октябрь 02, 2014, 12:31 »

Да, это оптимизация. Отключить оптимизацию можно в настройках проекта (вкладка C/С++ -> Optimization вроде).
Если вы ставите точку остановки и она становится пустой - наведите на неё мышь и подождите подсказки. Там будет написана причина, по которой точка остановки неактивна. В вашем случае скорее всего будет написано что кода нет в исполняемом файле Улыбающийся

PS отключение оптимизации повлияет на всю программу, что может вызвать её замедление. Но на мой взгляд, если нет большой нагрузки, замедление будет незначительным.
Записан
ksergey85
Гость
« Ответ #2 : Октябрь 02, 2014, 12:38 »

В итоговом варианте на релизной сборке оптимизация должна быть включена, поэтому отключить всю оптимизацию без разбора я не могу. Но в тестовой сборке у меня отключены все виды оптимизации как на уровне компилятора так и на уровне линковщика.
На несрабатывающем бряке пишет: "В настоящий момент попадание в точку останова не произойдет. Нет загруженных символов для этого документа."
Записан
ksergey85
Гость
« Ответ #3 : Октябрь 02, 2014, 13:54 »

Почитал поподробнее о работе линкера и пришел к выводу, что дело не в оптимизации. Линкер рассматривает lib-файл как библиотеку объектных файлов, которые будут использованы, только при необходимости, т.е. только при наличии ссылок на объекты в этом файле. А так как ссылок нет, то и obj-файл не линкуется. Всем спасибо.
Записан
Bepec
Гость
« Ответ #4 : Октябрь 02, 2014, 14:26 »

Как бы это и есть оптимизация, но видимо не отключаемая Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.048 секунд. Запросов: 20.