Почему я продолжаю получать неопределенные символы при компиляции простого приложения MySQL на MAC OSX? - PullRequest
2 голосов
/ 07 декабря 2010

Я использую MAC OSX и пытаюсь написать тестовое приложение msyql, которое просто проверяет соединение с локальной базой данных:

#include <my_global.h>
#include <mysql.h>


int main(void)
{
    MYSQL mysql;

    mysql_init(&mysql);
    mysql_options(&mysql, MYSQL_READ_DEFAULT_GROUP, "examplemysql");
    if(!mysql_real_connect(&mysql, "localhost", "someuser", "somepassword", "sampledb", 0, NULL, 0))
    {
        fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(&mysql));
    }

}

Я компилирую, используя команду: gcc -I / usr / local / mysql / include -L / usr / local / mysql / lib mysql.c

Я получаю следующие ошибки

Неопределенные символы
"_mysql_options", на которые ссылается:
_main in cceohP7E.o
"_mysql_real_connect", ссылка с:
_main in cceohP7E.o
"_mysql_init", ссылка с:
_main in cceohP7E.o
"_mysql_error", на который ссылается:
_main in cceohP7E.o
ld: символ (ы) не найдены
collect2: ld вернул 1 статус выхода

Я не эксперт по C / Unix, но хочу учиться. Я знаю, что у меня работает 64-битная архитектура. Может ли это быть проблемой? Дайте мне знать, что я делаю не так.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 07 декабря 2010

Как уже упоминали другие, вы скучаете по библиотеке.К счастью, MySQL делает это легко с помощью командной строки mysql_config:

gcc `mysql_config --include` mysql.c `mysql_config --libs`
1 голос
/ 05 июня 2012

Я обновляю этот ответ для OSX Lion и для всех, кто ищет это ... только потому, что это было трудно для меня.

mysql_config - это одна опция, или указание флагов gcc самостоятельно, но другаябез правильного разъема С все не получается.

Я на Lion 10.7.4 MacBook Air, и я скачал mysql-connector-c-6.0.2-osx10.5-x86-64bit.tar, который яполучил от http://ftp.dc.aleron.net/pub/mysql/Connector-C/

распаковать и разархивировать все файлы и скопировать соответствующие файлы / bin / include и / lib в соответствующие / usr / local / bin, / usr / local / include и / usr / licalКаталоги / lib как root

, затем я использовал gcc -o mysqlapp mysqlapp.c -L / usr / local / lib -l mysqlclient -lz -I / usr / local / include

mysqlapp.c использует mysql.h и все компилируется и работает нормально.Разъем, который я первоначально скачал с www.mysql.com, не будет работать правильно.Я не уверен, что случилось с этим.

1 голос
/ 07 декабря 2010

Вам нужно связать в общей библиотеке libmysql.so, это ошибки компоновщика при попытке найти другие символы.

Примерно так ...

gcc -I/usr/local/mysql/include -L/usr/local/mysql/lib mysql.c -lmysql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...