Von Hand bauen nutzt auch nichts, weil selbst mariadb_config den falschen Pfad liefert:
- root@Test-2204:mariadb_config --plugindir
- /usr/lib/x86_64-linux-gnu/libmariadb3/plugin
Link in das richtige Verzeichnis umgeht erfolgreich das Problem.
Das kann ja aber nicht die finale Lösung sein. Hat jemand eine Idee, wie man das sauber lösen kann ?
Unter Arch Linux liefern sowohl mariadb_config als auch pkg-config das richtige Verzeichnis:
- $ mariadb_config --plugindir
- /usr/lib/mysql/plugin
- $ pkg-config mariadb --variable=plugindir
- /usr/lib/mysql/plugin
- $ mariadb_config
- Copyright 2011-2020 MariaDB Corporation AB
- Get compiler flags for using the MariaDB Connector/C.
- Usage: mariadb_config [OPTIONS]
- Compiler: GNU 11.2.0
- --cflags [-I/usr/include/mysql -I/usr/include/mysql/mysql]
- --include [-I/usr/include/mysql -I/usr/include/mysql/mysql]
- --libs [-L/usr/lib/ -lmariadb]
- --libs_r [-L/usr/lib/ -lmariadb]
- --libs_sys [-ldl -lm -lssl -lcrypto]
- --version [10.7.3]
- --cc_version [3.2.6]
- --socket [/run/mysqld/mysqld.sock]
- --port [3306]
- --plugindir [/usr/lib/mysql/plugin]
- --tlsinfo [OpenSSL 1.1.1m]
- --variable=VAR VAR is one of:
- pkgincludedir [/usr/include/mysql]
- pkglibdir [/usr/lib]
- pkgplugindir [/usr/lib/mysql/plugin]
- --libmysqld-libs [-L/usr/lib/ -lmariadbd -ldl -lm -lssl -lcrypto]
- --embedded-libs [pkgincludedir]
- --embedded [/usr/include/mysql]
Display More
Unter Ubuntu/Debian sieht das für mich nach einem Problem des Quell-Pakets aus - da wird u.a. die mariadb.pc für den Server durch einen Symlink auf die libmariadb.pc für den Client überschrieben, wodurch man da aus den fertigen Paketen erst gar nicht an das Plugin-Verzeichnis kommt: https://salsa.debian.org/maria…/latest/debian/rules#L169 f.
Außerdem beendet sich mariadb_config mit einem Segfault, wenn man es ohne Argumente aufruft:
- $ gdb mariadb_config
- GNU gdb (Ubuntu 12.0.90-0ubuntu1) 12.0.90
- Copyright (C) 2022 Free Software Foundation, Inc.
- License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
- This is free software: you are free to change and redistribute it.
- There is NO WARRANTY, to the extent permitted by law.
- Type "show copying" and "show warranty" for details.
- This GDB was configured as "x86_64-linux-gnu".
- Type "show configuration" for configuration details.
- For bug reporting instructions, please see:
- <https://www.gnu.org/software/gdb/bugs/>.
- Find the GDB manual and other documentation resources online at:
- <http://www.gnu.org/software/gdb/documentation/>.
- For help, type "help".
- Type "apropos word" to search for commands related to "word"...
- Reading symbols from mariadb_config...
- Reading symbols from /usr/lib/debug/.build-id/00/29021794dbd175be69ca4f910a8d698b98ed54.debug...
- (gdb) r
- Starting program: /usr/bin/mariadb_config
- [Thread debugging using libthread_db enabled]
- Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
- Copyright 2011-2020 MariaDB Corporation AB
- Get compiler flags for using the MariaDB Connector/C.
- Usage: mariadb_config [OPTIONS]
- Compiler: GNU 11.2.0
- --cflags [-I/usr/include/mariadb -I/usr/include/mariadb/mysql]
- --include [-I/usr/include/mariadb -I/usr/include/mariadb/mysql]
- --libs [-L/usr/lib/x86_64-linux-gnu/ -lmariadb]
- --libs_r [-L/usr/lib/x86_64-linux-gnu/ -lmariadb]
- --libs_sys [-ldl -lm -lssl -lcrypto]
- --version [10.6.7]
- --cc_version [3.2.6]
- --socket [/run/mysqld/mysqld.sock]
- --port [3306]
- --plugindir [/usr/lib/x86_64-linux-gnu/libmariadb3/plugin]
- --tlsinfo [OpenSSL 3.0.1]
- --variable=VAR VAR is one of:
- pkgincludedir [/usr/include/mariadb]
- pkglibdir [/usr/lib/x86_64-linux-gnu]
- pkgplugindir [/usr/lib/x86_64-linux-gnu/libmariadb3/plugin]
- --libmysqld-libs [-L/usr/lib/x86_64-linux-gnu/ -lmariadbd -ldl -lm -lssl -lcrypto]
- Program received signal SIGSEGV, Segmentation fault.
- __strchrnul_sse2 () at ../sysdeps/x86_64/multiarch/../strchr.S:32
- 32 ../sysdeps/x86_64/multiarch/../strchr.S: No such file or directory.
- (gdb) bt
- #0 __strchrnul_sse2 () at ../sysdeps/x86_64/multiarch/../strchr.S:32
- #1 0x00007ffff7dfc162 in __find_specmb (format=0x1 <error: Cannot access memory at address 0x1>) at ./stdio-common/printf-parse.h:111
- #2 __vfprintf_internal (s=0x7ffff7fa1780 <_IO_2_1_stdout_>, format=0x1 <error: Cannot access memory at address 0x1>, ap=ap@entry=0x7fffffffe250, mode_flags=mode_flags@entry=2)
- at ./stdio-common/vfprintf-internal.c:1255
- #3 0x00007ffff7ebbdfb in ___printf_chk (flag=flag@entry=1, format=format@entry=0x1 <error: Cannot access memory at address 0x1>) at ./debug/printf_chk.c:33
- #4 0x0000555555555675 in printf (__fmt=0x1 <error: Cannot access memory at address 0x1>) at /usr/include/x86_64-linux-gnu/bits/stdio2.h:112
- #5 usage () at ./builddir/libmariadb/mariadb_config/mariadb_config.c:126
- #6 0x000055555555549b in main (argc=1, argv=0x7fffffffe4e8) at ./builddir/libmariadb/mariadb_config/mariadb_config.c:240
- (gdb) bt full
- #0 __strchrnul_sse2 () at ../sysdeps/x86_64/multiarch/../strchr.S:32
- No locals.
- #1 0x00007ffff7dfc162 in __find_specmb (format=0x1 <error: Cannot access memory at address 0x1>) at ./stdio-common/printf-parse.h:111
- No locals.
- #2 __vfprintf_internal (s=0x7ffff7fa1780 <_IO_2_1_stdout_>, format=0x1 <error: Cannot access memory at address 0x1>, ap=ap@entry=0x7fffffffe250, mode_flags=mode_flags@entry=2)
- at ./stdio-common/vfprintf-internal.c:1255
- thousands_sep = <optimized out>
- grouping = 0xffffffffffffffff <error: Cannot access memory at address 0xffffffffffffffff>
- done = 0
- f = <optimized out>
- lead_str_end = <optimized out>
- end_of_spec = <optimized out>
- work_buffer = '\000' <repeats 24 times>, "|\343\374\367\377\177\000\000\360\332\377\367\377\177\000\000\220\065\374\367\377\177\000\000\344U0\000\000\000\000\000\204\065\374\367\377\177\000\000@\273\373\367\377\177\000\000\351\347\374\367\377\177\000\000%\000\000\000\000\000\000\000P9\374\367\377\177\000\000\360\332\377\367\377\177\000\000(\337\377\377\377\177\000\000$\337\377\377\377\177\000\000\000\000\000\000\000\000\000\000P9\374\367\377\177\000\000\344U0\000\000\000\000\000$\337\377\377\377\177\000\000W\301\000\000\000\000\000\000\220\266\373\367\377\177\000\000\360\332\377\367\377\177\000\000\000\000\000\000\001\000\000\000z/\332\367\377\177\000\000h\274\330\367\377\177\000\000"...
- workend = <optimized out>
- ap_save = {{gp_offset = 16, fp_offset = 48, overflow_arg_area = 0x7fffffffe330, reg_save_area = 0x7fffffffe270}}
- nspecs_done = 0
- save_errno = 0
- readonly_format = 0
- do_longlong_number = <optimized out>
- __result = <optimized out>
- #3 0x00007ffff7ebbdfb in ___printf_chk (flag=flag@entry=1, format=format@entry=0x1 <error: Cannot access memory at address 0x1>) at ./debug/printf_chk.c:33
- mode = 2
- ap = {{gp_offset = 16, fp_offset = 48, overflow_arg_area = 0x7fffffffe330, reg_save_area = 0x7fffffffe270}}
- ret = <optimized out>
- #4 0x0000555555555675 in printf (__fmt=0x1 <error: Cannot access memory at address 0x1>) at /usr/include/x86_64-linux-gnu/bits/stdio2.h:112
- No locals.
- #5 usage () at ./builddir/libmariadb/mariadb_config/mariadb_config.c:126
- i = 14
- #6 0x000055555555549b in main (argc=1, argv=0x7fffffffe4e8) at ./builddir/libmariadb/mariadb_config/mariadb_config.c:240
- c = <optimized out>
- p = <optimized out>
Display More
Soweit ich das versehe, werden die Werte für das Plugin-Verzeichnis in mariadb_config von cmake bzw. dem Präprozessor statisch gesetzt (https://github.com/mariadb-cor…g/mariadb_config.c.in#L39 ff.) und meine Vermutung ist, dass da irgendwo in den Untiefen der cmake-Files (in
libmariadb/cmake/install.cmake ab Zeile 99 werden Variablen gesetzt, die dazu passen würden)
eine Sonderbehandlung für das Debian-Paket stattfindet. Leider ist das alles sehr bescheiden dokumentiert 