Server IP : 103.119.228.120 / Your IP : 18.188.223.120 Web Server : Apache System : Linux v8.techscape8.com 3.10.0-1160.119.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Jul 15 12:09:18 UTC 2024 x86_64 User : nobody ( 99) PHP Version : 5.6.40 Disable Function : shell_exec,symlink,system,exec,proc_get_status,proc_nice,proc_terminate,define_syslog_variables,syslog,openlog,closelog,escapeshellcmd,passthru,ocinum cols,ini_alter,leak,listen,chgrp,apache_note,apache_setenv,debugger_on,debugger_off,ftp_exec,dl,dll,myshellexec,proc_open,socket_bind,proc_close,escapeshellarg,parse_ini_filepopen,fpassthru,exec,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,proc_nice,proc_terminate,proc_get_status,proc_close,pfsockopen,leak,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,dl,symlink,shell_exec,system,dl,passthru,escapeshellarg,escapeshellcmd,myshellexec,c99_buff_prepare,c99_sess_put,fpassthru,getdisfunc,fx29exec,fx29exec2,is_windows,disp_freespace,fx29sh_getupdate,fx29_buff_prepare,fx29_sess_put,fx29shexit,fx29fsearch,fx29ftpbrutecheck,fx29sh_tools,fx29sh_about,milw0rm,imagez,sh_name,myshellexec,checkproxyhost,dosyayicek,c99_buff_prepare,c99_sess_put,c99getsource,c99sh_getupdate,c99fsearch,c99shexit,view_perms,posix_getpwuid,posix_getgrgid,posix_kill,parse_perms,parsesort,view_perms_color,set_encoder_input,ls_setcheckboxall,ls_reverse_all,rsg_read,rsg_glob,selfURL,dispsecinfo,unix2DosTime,addFile,system,get_users,view_size,DirFiles,DirFilesWide,DirPrintHTMLHeaders,GetFilesTotal,GetTitles,GetTimeTotal,GetMatchesCount,GetFileMatchesCount,GetResultFiles,fs_copy_dir,fs_copy_obj,fs_move_dir,fs_move_obj,fs_rmdir,SearchText,getmicrotime MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/postgresql-9.2.24/html/ |
Upload File : |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Building libpq Programs</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REV="MADE" HREF="mailto:pgsql-docs@postgresql.org"><LINK REL="HOME" TITLE="PostgreSQL 9.2.24 Documentation" HREF="index.html"><LINK REL="UP" TITLE="libpq - C Library" HREF="libpq.html"><LINK REL="PREVIOUS" TITLE="Behavior in Threaded Programs" HREF="libpq-threading.html"><LINK REL="NEXT" TITLE="Example Programs" HREF="libpq-example.html"><LINK REL="STYLESHEET" TYPE="text/css" HREF="stylesheet.css"><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"><META NAME="creation" CONTENT="2017-11-06T22:43:11"></HEAD ><BODY CLASS="SECT1" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="5" ALIGN="center" VALIGN="bottom" ><A HREF="index.html" >PostgreSQL 9.2.24 Documentation</A ></TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A TITLE="Behavior in Threaded Programs" HREF="libpq-threading.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="10%" ALIGN="left" VALIGN="top" ><A HREF="libpq.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="60%" ALIGN="center" VALIGN="bottom" >Chapter 31. <SPAN CLASS="APPLICATION" >libpq</SPAN > - C Library</TD ><TD WIDTH="20%" ALIGN="right" VALIGN="top" ><A TITLE="Example Programs" HREF="libpq-example.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="LIBPQ-BUILD" >31.20. Building <SPAN CLASS="APPLICATION" >libpq</SPAN > Programs</A ></H1 ><P > To build (i.e., compile and link) a program using <SPAN CLASS="APPLICATION" >libpq</SPAN > you need to do all of the following things: <P ></P ></P><UL ><LI ><P > Include the <TT CLASS="FILENAME" >libpq-fe.h</TT > header file: </P><PRE CLASS="PROGRAMLISTING" >#include <libpq-fe.h></PRE ><P> If you failed to do that then you will normally get error messages from your compiler similar to: </P><PRE CLASS="SCREEN" >foo.c: In function `main': foo.c:34: `PGconn' undeclared (first use in this function) foo.c:35: `PGresult' undeclared (first use in this function) foo.c:54: `CONNECTION_BAD' undeclared (first use in this function) foo.c:68: `PGRES_COMMAND_OK' undeclared (first use in this function) foo.c:95: `PGRES_TUPLES_OK' undeclared (first use in this function)</PRE ><P> </P ></LI ><LI ><P > Point your compiler to the directory where the <SPAN CLASS="PRODUCTNAME" >PostgreSQL</SPAN > header files were installed, by supplying the <TT CLASS="LITERAL" >-I<TT CLASS="REPLACEABLE" ><I >directory</I ></TT ></TT > option to your compiler. (In some cases the compiler will look into the directory in question by default, so you can omit this option.) For instance, your compile command line could look like: </P><PRE CLASS="PROGRAMLISTING" >cc -c -I/usr/local/pgsql/include testprog.c</PRE ><P> If you are using makefiles then add the option to the <TT CLASS="VARNAME" >CPPFLAGS</TT > variable: </P><PRE CLASS="PROGRAMLISTING" >CPPFLAGS += -I/usr/local/pgsql/include</PRE ><P> </P ><P > If there is any chance that your program might be compiled by other users then you should not hardcode the directory location like that. Instead, you can run the utility <TT CLASS="COMMAND" >pg_config</TT > to find out where the header files are on the local system: </P><PRE CLASS="SCREEN" ><SAMP CLASS="PROMPT" >$</SAMP > pg_config --includedir <SAMP CLASS="COMPUTEROUTPUT" >/usr/local/include</SAMP ></PRE ><P> </P ><P > Failure to specify the correct option to the compiler will result in an error message such as: </P><PRE CLASS="SCREEN" >testlibpq.c:8:22: libpq-fe.h: No such file or directory</PRE ><P> </P ></LI ><LI ><P > When linking the final program, specify the option <TT CLASS="LITERAL" >-lpq</TT > so that the <SPAN CLASS="APPLICATION" >libpq</SPAN > library gets pulled in, as well as the option <TT CLASS="LITERAL" >-L<TT CLASS="REPLACEABLE" ><I >directory</I ></TT ></TT > to point the compiler to the directory where the <SPAN CLASS="APPLICATION" >libpq</SPAN > library resides. (Again, the compiler will search some directories by default.) For maximum portability, put the <TT CLASS="OPTION" >-L</TT > option before the <TT CLASS="OPTION" >-lpq</TT > option. For example: </P><PRE CLASS="PROGRAMLISTING" >cc -o testprog testprog1.o testprog2.o -L/usr/local/pgsql/lib -lpq</PRE ><P> </P ><P > You can find out the library directory using <TT CLASS="COMMAND" >pg_config</TT > as well: </P><PRE CLASS="SCREEN" ><SAMP CLASS="PROMPT" >$</SAMP > pg_config --libdir <SAMP CLASS="COMPUTEROUTPUT" >/usr/local/pgsql/lib</SAMP ></PRE ><P> </P ><P > Error messages that point to problems in this area could look like the following: </P><PRE CLASS="SCREEN" >testlibpq.o: In function `main': testlibpq.o(.text+0x60): undefined reference to `PQsetdbLogin' testlibpq.o(.text+0x71): undefined reference to `PQstatus' testlibpq.o(.text+0xa4): undefined reference to `PQerrorMessage'</PRE ><P> This means you forgot <TT CLASS="OPTION" >-lpq</TT >. </P><PRE CLASS="SCREEN" >/usr/bin/ld: cannot find -lpq</PRE ><P> This means you forgot the <TT CLASS="OPTION" >-L</TT > option or did not specify the right directory. </P ></LI ></UL ><P> </P ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="libpq-threading.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="libpq-example.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Behavior in Threaded Programs</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="libpq.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Example Programs</TD ></TR ></TABLE ></DIV ></BODY ></HTML >