Как исправить неразрешенную ошибку компоновщика external std::locale::id :: id в C++ Builder
При компиляции проекта C ++ Builder 10.4 я получаю следующую ошибку компоновщика:
[Ошибка ilink32] Ошибка: неразрешенная внешняя ссылка 'std :: locale :: id :: id(unsigned int)' из C: \ USERS \ PUBLIC \ DOCUMENTS \ EMBARCADERO \ STUDIO \ 21.0 \ DCP \ SCREEN2VIDEO.LIB|Screen2Video
Эта ошибка компоновщика возникает, когда параметр «Связать с динамическим RTL» отключен. При включении ошибка компоновщика не возникает, но я хочу статически линковать.
SCREEN2VIDEO.LIB из пакета, содержащего импортированный элемент управления ActiveX.
2 ответа
Та же проблема здесь, но с C++ Builder 11. Оказалось, проблема оптимизатора. Попробуйте отключить все оптимизации. Также ознакомьтесь с одним из связанных отчетов об ошибках на Embarcadero:https://quality.embarcadero.com/browse/RSP-29221
Изменить: я немного поэкспериментировал и нашел проблемный флаг компилятора. Это -finline-functions неявно добавляется при использовании -O2 или выше. Поэтому в качестве обходного пути вы можете добавить -fno-inline-functions в C ++ compiler> Advanced> Additional Options, чтобы заставить его работать, по крайней мере, не слишком сильно влияя на производительность.
Я также добавил эту информацию в вышеупомянутый отчет об ошибке.
Перекомпилируйте все зависимые пакеты (включая screen2video.bpl) с отключенным динамическим RTL. Это исправило ошибку компоновщика.