Неопределенные символы - это, как правило, функции или переменные, которые не могут быть разрешены на последнем этапе связывания.
Самая распространенная причина - не удается добавить объектный файл или разделяемую библиотеку, которая их содержит, в параметры компилятора / компоновщика. Например, если разделяемой библиотекой является libtest.so, вам нужно добавить опцию -ltest в gcc, которая обычно используется для компоновки во многих системах вместо непосредственного использования ld.
Во многих других случаях компоновщик не может найти указанные библиотеки, потому что путь поиска библиотеки (опция -L в gcc) задан неправильно, чтобы компоновщик мог найти эти библиотеки. В этом случае, однако, компоновщик выдаст отдельное сообщение об ошибке о невозможности найти указанную библиотеку.
Другая, гораздо менее распространенная причина - использование заголовочных файлов с условными частями, которые не синхронизированы с реальной общей библиотекой. В качестве примера представьте, что вы используете версии функций в библиотеке в юникоде, как определено в ее заголовочном файле, тогда как фактический объект общей библиотеки не поддерживает юникод и поэтому не включает эти функции.
В вашем случае символ mysql_options находится в библиотеках libmysqlclient и libmysqlclient_r. Вы должны проверить командную строку, которая вызывает ошибку, и посмотреть, не связана ли какая-либо из них с ней.
Если вам нужна дополнительная помощь, вы должны предоставить нам указанную командную строку, точные сообщения об ошибках и некоторую информацию о том, что вы пытаетесь скомпилировать.