У меня есть программа на C, которая динамически загружает файл .so во время выполнения для подключения к базе данных MySQL. На x86 (32-битном) ядре это работает нормально, но когда я перекомпилирую свою программу на x86_64 (64-битном) ядре, я получаю ошибки времени выполнения, такие как:
dlerror: mysql-1.932-x86_64-freebsd7.2.so::plugin_tweak_products: Undefined symbol "plugin_filter_cart"
dlerror: mysql-1.932-x86_64-freebsd7.2.so::plugin_shutdown: Undefined symbol "plugin_post_action"
Из приведенного выше сообщения об ошибке видно, что эта программа работает на компьютере с FreeBSD 7.2 x86_64. И программа C, и файл .so скомпилированы для 64-битной системы.
Я передаю RTLD_LAZY в dlopen () при загрузке .so файла. Я думаю, что проблема в том, что по какой-то причине на x86_64 он не загружает части библиотеки динамически, а на 32-битном x86. Есть ли какой-нибудь флаг, который я могу вставить в свой Makefile.am, чтобы он работал на x86_64? Есть другие идеи?
Вот, что перечисляет команда файла для моей программы на C
ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, not stripped
и для .so файла
ELF 64-bit LSB shared object, x86-64, version 1 (FreeBSD), not stripped