Russian Qt Forum

Программирование => С/C++ => Тема начата: ksergey85 от Октябрь 02, 2014, 12:26



Название: Нюансы сборки
Отправлено: 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.


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

PS отключение оптимизации повлияет на всю программу, что может вызвать её замедление. Но на мой взгляд, если нет большой нагрузки, замедление будет незначительным.


Название: Re: Нюансы сборки
Отправлено: ksergey85 от Октябрь 02, 2014, 12:38
В итоговом варианте на релизной сборке оптимизация должна быть включена, поэтому отключить всю оптимизацию без разбора я не могу. Но в тестовой сборке у меня отключены все виды оптимизации как на уровне компилятора так и на уровне линковщика.
На несрабатывающем бряке пишет: "В настоящий момент попадание в точку останова не произойдет. Нет загруженных символов для этого документа."


Название: Re: Нюансы сборки
Отправлено: ksergey85 от Октябрь 02, 2014, 13:54
Почитал поподробнее о работе линкера и пришел к выводу, что дело не в оптимизации. Линкер рассматривает lib-файл как библиотеку объектных файлов, которые будут использованы, только при необходимости, т.е. только при наличии ссылок на объекты в этом файле. А так как ссылок нет, то и obj-файл не линкуется. Всем спасибо.


Название: Re: Нюансы сборки
Отправлено: Bepec от Октябрь 02, 2014, 14:26
Как бы это и есть оптимизация, но видимо не отключаемая :)