Как скомпилировать динамический lib, а не статический, в кодовых блоках - PullRequest
0 голосов
/ 30 января 2012

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

/ USR / Lib / MySQL / libmysqlclient.a

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

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

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

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

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

1 Ответ

0 голосов
/ 30 января 2012

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

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

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

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

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