Обсуждение: how to call the function--pqCatenateResultError()
Hello!~
Now i encounter a function call problem in PostgreSQL's psql module!
The situation is as follow:
In ./src/bin/psql/common.c, I want to call the function pqCatenateResultError().
Function pqCatenateResultError() is declared in ./src/interfaces/libpq/libpq-init.h
extern void pqCatenateResultError(PGresult *res, const char *msg);
and is defined in ./src/interfaces/libpq/fe-exec.c
void
pqCatenateResultError(PGresult *res, const char *msg)
{
PQExpBufferData errorBuf;
if (!res || !msg)
return;
initPQExpBuffer(&errorBuf);
if (res->errMsg)
appendPQExpBufferStr(&errorBuf, res->errMsg);
appendPQExpBufferStr(&errorBuf, msg);
pqSetResultError(res, errorBuf.data);
termPQExpBuffer(&errorBuf);
}
To call this function in ./common.c, I include 'libpq-init.h' in ./src/bin/psql/common.h .
As ./common.c include the header file 'common.h'.
But when I use pqCatenateResultError() in ./common.c, It appears "undefined reference to pqCatenateResultError()" first.
So I include 'extern void pqCatenateResultError(PGresult *res, const char *msg);' at the begining of './common.c' .
But this change make no difference to the result.
I do not know why this happened! Someone hlep me! Thank you.
There is another situation similar to the situation above:
Function PQexec() is declared in ./src/interfaces/libpq/libpq-fe.h and defined in ./src/interfaces/libpq/fe-exec.c
extern PGresult *PQexec(PGconn *conn, const char *query);
I can call this function with no error happening!
These two situation puzzled me!~
From: Stone
2011/6/27 _石头 <tanjia76@qq.com>: > Hello!~ > > Now i encounter a function call problem in PostgreSQL's psql module! > > The situation is as follow: > In ./src/bin/psql/common.c, I want to call the > function pqCatenateResultError(). > Function pqCatenateResultError() is declared in > ./src/interfaces/libpq/libpq-init.h > extern void > pqCatenateResultError(PGresult *res, const char *msg); > and is defined in ./src/interfaces/libpq/fe-exec.c > void > pqCatenateResultError(PGresult *res, const > char *msg) > { > PQExpBufferData errorBuf; > if (!res || !msg) > return; > initPQExpBuffer(&errorBuf); > if (res->errMsg) > appendPQExpBufferStr(&errorBuf, res->errMsg); > appendPQExpBufferStr(&errorBuf, msg); > pqSetResultError(res, errorBuf.data); > termPQExpBuffer(&errorBuf); > } > To call this function in ./common.c, I include 'libpq-init.h' in > ./src/bin/psql/common.h . > As ./common.c include the header file 'common.h'. > But when I use pqCatenateResultError() in ./common.c, It appears > "undefined reference to pqCatenateResultError()" first. > > So I include 'extern void pqCatenateResultError(PGresult *res, const > char *msg);' at the begining of './common.c' . > But this change make no difference to the result. > > I do not know why this happened! Someone hlep me! Thank you. > There is another situation similar to the situation above: > Function PQexec() is declared in ./src/interfaces/libpq/libpq-fe.h and > defined in ./src/interfaces/libpq/fe-exec.c > extern PGresult *PQexec(PGconn *conn, const > char *query); > I can call this function with no error happening! > These two situation puzzled me!~ Are you developing on Windows, by any chance? -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company