Галочка, по возможности, добавляет статическую ссылку на объект класса (или на функцию), которые не были связаны в другом файле cpp той же библиотеки (или в другой уже используемой библиотеке).
У меня такая ситуация:
- библиотека A с классом clsA в clsA.cpp, который выдает ошибку
- библиотека A с foo.cpp, которая не дает ошибок ссылок
- библиотека B, использующая класс clsA
- Приложение использует обе библиотеки и использует классы / функции из foo.cpp
Я получаю неразрешенную ссылку в приложении при использовании объекта в библиотеке B, который использует класс clsA.
Связывание приложения с библиотеками A и B выдает мне ошибку. Так как я использую CodeLite, трудно изменить порядок библиотек. Я просто помещаю статический объект в foo.cpp:
#include "clsA.h"
clsA objA;
Теперь компоновщик видит, что ссылки на clsA находятся в библиотеке A (между foo.cpp) и будут правильно связываться в приложении, поскольку файл foo.cpp уже был связан.
Но хитрость работает, даже если объект был создан в фиктивной функции, никогда не вызывался, поэтому объект никогда не был бы выделен:
// foo.cpp
#include "clsA.h"
void dummyf()
{
clsA objA;
}