Description:
I get an undefined symbol error when I execute Mroonga that was built together with MySQL 8.4.9:
---
ERROR 1126 (HY000) at line 1: Can't open shared library '/usr/lib/mysql/plugin/ha_mroonga.so' (errno: 11 /usr/lib/mysql/plugin/ha_mroonga.so: undefined symbol: mysql_malloc_service)
---
Mroonga statically links libmysqlservices.a because it calls my_malloc() internally.
However, libmysqlservices.a provided in the official Debian package (libmysqlclient-dev_8.4.9-1debian13_amd64.deb) does not seem to contain these required symbols, as shown below:
---
Output of nm for 8.4.9:
% wget https://repo.mysql.com/apt/debian/pool/mysql-8.4-lts/m/mysql-community/libmysqlclient-dev_...
% mkdir 8.4.9
% dpkg-deb -R libmysqlclient-dev_8.4.9-1debian13_amd64.deb 8.4.9
% nm 8.4.9/usr/lib/x86_64-linux-gnu/libmysqlservices.a
service_command.c.o:
nm: service_command.c.o: no symbols
locking_service.c.o:
nm: locking_service.c.o: no symbols
srv_session_service.c.o:
nm: srv_session_service.c.o: no symbols
thd_alloc_service.c.o:
nm: thd_alloc_service.c.o: no symbols
thd_wait_service.c.o:
nm: thd_wait_service.c.o: no symbols
my_plugin_log_service.c.o:
nm: my_plugin_log_service.c.o: no symbols
my_thread_scheduler_service.c.o:
nm: my_thread_scheduler_service.c.o: no symbols
mysql_string_service.c.o:
nm: mysql_string_service.c.o: no symbols
mysql_malloc_service.c.o:
nm: mysql_malloc_service.c.o: no symbols
mysql_password_policy_service.c.o:
nm: mysql_password_policy_service.c.o: no symbols
parser_service.c.o:
nm: parser_service.c.o: no symbols
srv_session_info_service.c.o:
nm: srv_session_info_service.c.o: no symbols
rpl_transaction_ctx_service.c.o:
nm: rpl_transaction_ctx_service.c.o: no symbols
rpl_transaction_write_set_service.c.o:
nm: rpl_transaction_write_set_service.c.o: no symbols
security_context_service.c.o:
nm: security_context_service.c.o: no symbols
mysql_keyring_service.c.o:
nm: mysql_keyring_service.c.o: no symbols
plugin_registry_service.c.o:
nm: plugin_registry_service.c.o: no symbols
---
Therefore, an undefined symbol error occurs.
For comparison, libmysqlservices.a from version 8.4.8 does contain these symbols, as shown below
---
Output of nm for 8.4.8:
% wget https://repo.mysql.com/apt/debian/pool/mysql-8.4-lts/m/mysql-community/libmysqlclient-dev_...
% mkdir 8.4.8
% dpkg-deb -R libmysqlclient-dev_8.4.8-1debian13_amd64.deb 8.4.8
% nm 8.4.8/usr/lib/x86_64-linux-gnu/libmysqlservices.a
service_command.c.o:
0000000000000000 D command_service
locking_service.c.o:
0000000000000000 D mysql_locking_service
srv_session_service.c.o:
0000000000000000 D srv_session_service
thd_alloc_service.c.o:
0000000000000000 D thd_alloc_service
thd_wait_service.c.o:
0000000000000000 D thd_wait_service
my_plugin_log_service.c.o:
0000000000000000 D my_plugin_log_service
my_thread_scheduler_service.c.o:
0000000000000000 D my_thread_scheduler_service
mysql_string_service.c.o:
0000000000000000 D mysql_string_service
mysql_malloc_service.c.o:
0000000000000000 D mysql_malloc_service
mysql_password_policy_service.c.o:
0000000000000000 D mysql_password_policy_service
parser_service.c.o:
0000000000000000 D mysql_parser_service
srv_session_info_service.c.o:
0000000000000000 D srv_session_info_service
rpl_transaction_ctx_service.c.o:
0000000000000000 D rpl_transaction_ctx_service
rpl_transaction_write_set_service.c.o:
0000000000000000 D transaction_write_set_service
security_context_service.c.o:
0000000000000000 D security_context_service
mysql_keyring_service.c.o:
0000000000000000 D mysql_keyring_service
plugin_registry_service.c.o:
0000000000000000 D plugin_registry_service
How to repeat:
% wget https://repo.mysql.com/apt/debian/pool/mysql-8.4-lts/m/mysql-community/libmysqlclient-dev_...
% mkdir 8.4.9
% dpkg-deb -R libmysqlclient-dev_8.4.9-1debian13_amd64.deb 8.4.9
% nm 8.4.9/usr/lib/x86_64-linux-gnu/libmysqlservices.a