Как исправить проблему с файлом postgres.h?

Я пытаюсь написать базовый тип для PostgreSQL на C (используя xcode), и я уже установил PostgreSQL 11, но кажется, что postgres.h нельзя просто включить в файл ("файл 'postgres.h' не найден").

Может ли кто-нибудь сказать мне, как решить эту проблему? И могу ли я писать код в произвольном каталоге или мне нужно писать в каталоге PostgreSQL?

Или, возможно, вопрос должен быть: как установить файлы заголовков, такие как postgres.h?


person Jasper Zhou    schedule 23.06.2019    source источник
comment
Не пользователь Xcode, но обычно вы должны указать компилятору, где искать сторонние заголовки (а затем компоновщику, где искать сами библиотеки, что может быть вашей следующей проблемой). stackoverflow.com/ вопросы/14134064/   -  person Clifford    schedule 23.06.2019
comment
Если установлены двоичные файлы postgres, также устанавливается pg_config (в том же каталоге bin/). Запуск pg_config покажет вам флаги компилятора и загрузчика. (если есть)   -  person wildplasser    schedule 23.06.2019
comment
Первый вопрос: как вы установили PostgreSQL? Если из пакетов, то файлы заголовков часто находятся в другом пакете разработки, который вам нужно установить.   -  person Laurenz Albe    schedule 24.06.2019
comment
Спасибо за ваш ответ, на самом деле я установил свой PostgreSQL с помощью homebrew, что мне делать? @LaurenzAlbe   -  person Jasper Zhou    schedule 24.06.2019


Ответы (2)


Установите пакет postgresql-server-dev с помощью этой команды:

sudo apt install postgresql-server-dev-XX

Замените [XX] на уже установленную версию postgresql: 9.5, 10, 11, 12.

person Nuzhat Ansari    schedule 18.05.2020
comment
Рекомендую вам запустить sudo apt-cache search postgresql-server-dev. В Kali linux этих версий нет. Мне лично нужно было sudo apt install postgresql-server-dev-all - person Dave; 05.07.2021
comment
Или установите любую версию, которую вы хотите, с инструкциями, найденными в этом сообщении: stackoverflow.com/questions/48868156/ - person Dave; 05.07.2021

Здесь у вас есть несколько подходов:

  • Найдите файл самостоятельно, используя какую-нибудь команду, например

    find / -name "postgres.h" -print
    

    это скажет вам (на моем Mac), что файл находится в:

    /usr/local/Cellar/postgresql/11.2_1/include/server/postgres.h
    

    и добавьте параметр -I /usr/local/Cellar/postgresql/11.2_1/include/server в компилятор. Проверьте свою версию postgresql на наличие другой версии.

  • Вероятно, есть еще один пакет для разработки баз данных. Найдите пакет с именем postgresql-dev или похожим и установите его. После поиска пакетов с:

     brew search postgres 
    

    а также

     brew search psql
    

    в моей системе не появляется ничего подходящего.

РЕДАКТИРОВАТЬ

Я проверил наличие этого файла в системе FreeBSD, и он появился на

/usr/local/include/postgresql/server/postgres.h

Так что, вероятно, вам нужно вместо этого использовать #include <server/postgres.h> и использовать соответствующий флаг -I (как упоминалось выше)

person Luis Colorado    schedule 25.06.2019
comment
Я использовал команду «find / -name postgres.h -print», и есть 2-строчный полезный вывод: /usr/local/pgsql/include/server/postgres.h /usr/local/Cellar/postgresql/11.2/include /server/postgres.h, а затем я использовал gcc -I /usr/local/Cellar/postgresql/11.2/include/server/, вот результат... clang: ошибка: нет входных файлов... - person Jasper Zhou; 25.06.2019
comment
извините, я не очень хорошо знаком с c и компилятором - person Jasper Zhou; 25.06.2019
comment
Тогда вы должны учиться. Как я могу точно определить вашу проблему, если вы вообще не опубликовали никакого кода? Проблемы с компиляцией появляются из кода... вы не показали даже исходную строку, в которой файл postgres.h является #included - person Luis Colorado; 25.06.2019