Bug #120697 Undefined symbol error when running Mroonga built with MySQL 8.4.9
Submitted: 16 Jun 2:37
Reporter: Yasuhiro Horimoto Email Updates:
Status: Open Impact on me:
None 
Category:MySQL Server: Packaging Severity:S3 (Non-critical)
Version:8.4.9 OS:Debian (13)
Assigned to: CPU Architecture:Any

[16 Jun 2:37] Yasuhiro Horimoto
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