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
Re: VC++ Не всё линкуется при трёхуровневой зависимости прое
От: Mr.Delphist  
Дата: 18.04.11 07:46
Оценка:
Здравствуйте, kFk, Вы писали:

kFk>2) Добавляем проект 3, который зависит от 2. В результате 2 теперь получаем статическую либу, 3 — ехе файл. Результат — все или часть классов, определенных в проекте 1, не линкуются. Проблема — при запуске программы они не биндятся и их нельзя использовать в скриптах.


Оптимизацию пробовали отключать? Такое ощущение, что при сборке просто выбрасывается dead code.
Может, попробовать экспортить эти классы?
Re[2]: VC++ Не всё линкуется при трёхуровневой зависимости п
От: Аноним  
Дата: 19.04.11 14:03
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>Оптимизацию пробовали отключать? Такое ощущение, что при сборке просто выбрасывается dead code.

MD>Может, попробовать экспортить эти классы?

Проблема актуальна и в Debug'е. И да, по идее выбрасывается dead code, т.к. он нигде больше в С++ не используется.
Не могли бы Вы уточнить, что имеется в виду под "экспортить эти классы"?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.