Есть статическая библиотека (.lib/.a). В этой библиотеке находится файл с namespace, в котором две const переменные с публичным и приватным ключом:
namespace dsa
{
const std::vector<uint8_t> private_key = {...}
const std::vector<uint8_t> public_key = {...}
}
Публичный ключ используется в динамической библиотеке (.dll/.so), путем подключения исходной статической библиотеки.
Приватный ключ используется в исполняемом файле, путем подключения исходной статической библиотеки.
Поскольку статическая библиотека является слепком .obj файлов единиц трансляции, то оба ключа будут в ней, это понятно.
А вот будет ли в публичную динамическую библиотеку (.dll/.so) попадать информация о приватном ключе, если в ней не вызываются функции, использующие его?
Как вообще организовано хранение подобных данных (глобальные const НЕ POD данные) в windows/linux файлах динамических библиотек?
Да в *.dll попадут оба ключа. В этом отношении, линковка dll ни чем не отличается от exe. Проверить наличие переменной можно попросив линкер генерировать map файл.
Линкер может выкинуть (при подключении .lib файла), только единицу трансляции целиком (соответствующею одному .obj/.cpp, из тех, что попали в .lib), и только в случае, если нет ссылок ни на один символ из этой единицы трансляции. Но ссылка на публичный ключ используется в любом случае...
Самый надежный способ - написать две статические либы: с приватным и с публичным ключами по отдельности, тем более, что они должны обеспечивать разную функциональность: передача и прием сообщений.
Исходя из ответа @Chorkov провел несколько тестов с использованием /MAP и результаты огорчили. Решил хранить приватный ключ в отдельном файле, исключив его таким образом из кода вообще.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Работаю с std::list Есть класс TTimerData (с методами) который надо поместить в лист
Хочу получить текстовое содержимое по id, например получить "6000118":