Неопределенная ссылка для функций libpq - PullRequest
3 голосов
/ 21 ноября 2010

У меня есть два проекта, один - это библиотека, которая использует заголовки libpq и исполняемый файл, который ссылается на мою библиотеку и на libpq, но независимо от того, как я добавляю make-файл, он просто не связывает libpq и всегда возвращает мне неопределенная ошибка ссылки. Он связывает мою библиотеку ок.

g++  -o MYAPP  main.o -L../Libs -lpq -lMYLIB

и libpq.a, и libmylib.a находятся в каталоге Libs.
Я использовал nm, чтобы проверить функции, и они есть, я изменил -lpq на -lpq_, и компилятор жалуется на отсутствующую библиотеку, поэтому он находит и теоретически связывает, но не может найти ссылки?

это действительно беспокоит меня, что бы это могло быть?

(мой английский не очень хорош, извините)

Спасибо
Jonathan

1 Ответ

3 голосов
/ 21 ноября 2010

Я быстро проверил некоторые заголовки postgre, которые у меня есть, и они, похоже, не закрываются в extern "C" при компиляции с помощью компилятора C ++.Возможно ли, что ваша проблема будет решена путем включения операторов include для заголовков postgre в блоке extern "C" { ... }?

Edit.Я думаю, что проблема заключается в следующем: libpq.a and libmylib.a.Сначала я упустил это из виду в вашем первоначальном посте, извините за шум.Когда вы даете -lpq gcc, он пытается установить динамическую связь. Если не указан каталог библиотеки с -L и , существуют только статические версии библиотек.Статические библиотеки не могут документировать, какие другие библиотеки им нужно использовать. Кроме того, для статических библиотек важен порядок спецификаций.Библиотеки, которые зависят от других библиотек, должны быть перечислены перед ними.Устанавливая через apt-get, вы устанавливаете общие библиотеки, которые правильно документируют, что еще им нужно связать (отметьте ldd /usr/lib/libpq.so).Итак, в предыдущей попытке вам, вероятно, нужно было просто поменять -lpq на -lMYLIB и перечислить другие библиотеки, которые нужны libpq.

...