2012-01-29 5 views
0

Я использую кодовые блоки для компиляции приложения, которое использует mysql. В CentOS 6 это приложение компилируется отлично (и я предположил, что использовал .so-файл). Под CentOS 5 этот же файл проекта не будет компилироваться, если Я не пойду к Project | Options | Построить компоновщика | Link Libraries и добавьте:Как скомпилировать динамическую библиотеку, а не статическую, в кодовых блоках

/usr/lib/mysql/libmysqlclient.a

в противном случае я получаю ссылки ошибки как

* myfile.c | 87 | неопределенная ссылка на `mysql_use_result '| *

  1. Означает ли это, что в CentOS 6 компоновщик использует динамический файл .so, но в CentOS 5 используется статический файл .a?

  2. Есть ли способ настроить мой проект так, чтобы он также связывался с динамическим .so-файлом?

  3. Я также должен добавить библиотеки libresolv и libbrl в библиотеки компоновщиков или у меня появилось много ошибок. (А под CentOS 6 я этого не делаю). Это та же проблема?

ответ

0

У вас есть две проблемы.

Первый заключается в том, что правильный способ связывания с mysql заключается в добавлении -lmysqlclient к линии ссылок, вместо того, чтобы напрямую связывать статическую библиотеку. Когда вы добавите -lx в линию ссылок, компоновщик будет искать LDPATH для файла с именем libx.so (если есть динамическая ссылка) или libx.a (если статическая ссылка).

Вы должны перепроверить, что libmysqlclient.so находится в LDPATHи является совместимой архитектурой (имейте в виду 64-бит против 32-битных проблем).

Причина, по которой вам нужно добавить -lresolv и -lssl, а также в CentOS 6, заключается в том, что библиотека MySQL больше не автоматически втягивает их в предыдущие версии, это всегда было бы, но в CentOS 6 она должным образом не работает. Как правило, вы можете использовать pkg-config, чтобы узнать, что вам нужно, чтобы связать определенную библиотеку (или посмотреть ее файл .la, если он установлен). Вы также можете использовать libtool, чтобы сделать ссылку, но я не рекомендую это делать.