GCC не связывает RHash?
У меня это работает в моей тестовой среде, но я не могу понять, как я это сделал. В основном, я пытаюсь скомпилировать MySQL UDF, который использует функции из RHash, но я получаю это с сервера MySQL
Код ошибки: 1126. Не удается открыть общую библиотеку 'sha3.so' (номер ошибки: 0 /usr/lib/mysql/plugin/sha3.so: неопределенный символ: rhash_msg)
На сервере я запускаю эти
apt install rhash librhash-dev
И я даже скачал исходный код (только потому, что он еще не работал) с https://github.com/rhash/RHash и запустил
./configure
make test
make install
Который, кажется, не дает мне никаких ошибок, а затем я компилирую
gcc -I/usr/include/mysql -lrhash -o sha3.so -shared sha3.c -fPIC
Который ТАКЖЕ не дает никаких ошибок, но тогда я получаю эту ошибку MySQL при запуске
create function`sha3`returns string soname'sha3.so';
Какой шаг я здесь делаю не так?
На всякий случай мой источник здесь https://gist.github.com/BrianLeishman/a0f40e7a0a87a7069c5c56a768ff3179
Я видел этот ответ Что такое неопределенная ссылка / неразрешенная внешняя ошибка символа и как ее исправить?, но я почти уверен, что порядок аргументов уже установлен правильно, но, возможно, я ошибаюсь, поскольку все их примеры говорят об установке вывода перед ссылкой, что, безусловно, не то, что я здесь делаю.
1 ответ
Предложенный вопрос о том, что это дубликат, может быть слишком техническим для тех, кто начинает с GCC и C/C++, так что, хотя он и может быть ДИСКОВЫМ, Я бы хотел, чтобы этот вопрос / ответ оставался здесь для людей из то же место, что и я.
В основном, определенные версии Linux делают шаги для компиляции по-разному, поэтому
gcc -I/usr/include/mysql -lrhash -o sha3.so -shared sha3.c -fPIC
может работать в зависимости от ОС и версии, но чтобы убедиться, что это работает на всех, переместите -lrhash
после sha3.c
(в этом случае) как
gcc -I/usr/include/mysql -o sha3.so -shared sha3.c -lrhash -fPIC