VC++ Не всё линкуется при трёхуровневой зависимости проектов
От: kFk  
Дата: 12.04.11 14:56
Оценка:
Использую 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>();

Результат — часть начала линковаться, остальная нет.
с++ msvs vc lua luabind
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.