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
Другие вопросы по тегам