Использую MSVS 2008. Есть две ситуации:
1) В solution'е 2 проекта. Второй зависит от первого (зависимость — параметр Project Dependency проекта).
В проекте 1 часть классов объявлены и определены, но нигде в коде не используются (не создаётся ни одного экземпляра). Лишь идёт биндинг для использования в скриптах (lua + luabind). Функция биндинга определена как статический метод класса. Она вызывается автоматически с помощью кода, который находится в cpp и использует нечто вроде "const bool is_bound = ClassName::Bind()". Результат проекта 1 — статическая либа, 2 — ехе файл. Все классы биндятся и доступны в скриптах.
2) Добавляем проект 3, который зависит от 2. В результате 2 теперь получаем статическую либу, 3 — ехе файл. Результат — все или часть классов, определенных в проекте 1, не линкуются. Проблема — при запуске программы они не биндятся и их нельзя использовать в скриптах.
Как можно решить эту проблему и в чём её причина?
Заранее огромное спасибо.
P.S. Пробовал решить "руками" с помощью форсирования линковки за счёт имитации использования (в качестве эксперимента).
С помощью вызова подобных функций (да, ужас)):
template <class T, class A1, class A2>
void ForceLinking()
{
boost::function<void(A1, A2)> f =
boost::bind<T>(boost::lambda::constructor<T>(), _1, _2);
}
ForceLinking<ClassName, const string&, bool>();
Результат — часть начала линковаться, остальная нет.
Здравствуйте, kFk, Вы писали:
kFk>2) Добавляем проект 3, который зависит от 2. В результате 2 теперь получаем статическую либу, 3 — ехе файл. Результат — все или часть классов, определенных в проекте 1, не линкуются. Проблема — при запуске программы они не биндятся и их нельзя использовать в скриптах.
Оптимизацию пробовали отключать? Такое ощущение, что при сборке просто выбрасывается dead code.
Может, попробовать экспортить эти классы?