Я компилирую вариант Percona (MySQL )на моем Raspberry Pi, который имеет процессор ARM.
Я столкнулся с проблемой во время компиляции, о которой сообщалось, но никто не хочет ее исправлять, потому что ARM — неподдерживаемая платформа.
https://bugs.launchpad.net/percona-server/+bug/1002848
Мне удалось обойти эту проблему и успешно скомпилировать, но мне немного не хватает знаний о С++, и я не совсем понимаю, действительно ли я что-то сломал или нет.
Я прочитал множество вопросов о недопустимом преобразовании из const char *в char *на SO, и именно здесь у меня появилась идея для этого обходного пути.
Ошибка была следующая:
error: invalid conversion from 'const pthread_mutex_t*' to 'pthread_mutex_t*'
(на самом деле его не было pthread_mutex_t
на моей платформе, но проблема в том же -фактическом типе, потерянном в бесконечной бездне, который является буфером прокрутки)
Код нарушения был:
uint32 count(uint index) const
{
my_atomic_rwlock_rdlock(&time_collector_lock);
Я изменил это на:
uint32 count(uint index) const
{
my_atomic_rwlock_t dummy = time_collector_lock;
my_atomic_rwlock_rdlock(&dummy);
время _коллектор _блокировка определяется как:
private:
my_atomic_rwlock_t time_collector_lock;
Из-за того, что это должен быть мьютекс, у меня есть ощущение, что я, вероятно, сделал этот не -поток -безопасным. Или это нормально?
Есть ли лучшее решение?