Комментарии 12
Серёжа, спасибо!
Обратитесь в поддержку IBM :))
Как inline функция оказалась в экспорте? Может оптимизация отключена настолько, что inline не раскрываются?
Не проводил широких экспериментов с оптимизацией. Пример с inline функцией был выбран для упрощения. Если вместо нее в foo и boo создавать объект типа std::string, то тоже будет наблюдаться включение "ненужного" модуля. Линкер в первом модуле *BNDDIR увидит инстанцированный конструктор std::basic_string и включит этот модуль в программу, хотя это инстанцирование уже есть в модуле BOO$.
Это важно. Если оптимизация отключена, то для облегчения отладки компилятор не раскрывает inline - тогда можно встать дебаггером внутрь inline функции. Поскольку inline определен в хедере, то компилятор фактически создаёт обычную, не inline, функцию внутри модуля, в котором используется эта функция. Внутри какого модуля - зависит от реализации компилятора и порядка обхода модулей во время компиляции.
Если бы inline раскрылся, то символа вообще не создалось бы, ни в импорте, ни в экспорте.
Да фиг с ним с экспортом, как она оказалась в импорте?
Баг или фича *BNDDIR?