Thread: c function - undefined symbols
I already asked this question on the psql-novice list, but didn't get any reply. I am aware that this is probably a basic question and hope someone here can point me in the right direction! Hi! I am currently trying my first steps in writing my own functions in C. I read through the documentation and tried the most simple examples as shown in <http://www.postgresql.org/docs/8.3/static/xfunc-c.html>. Sadly this was already the point where I stumbled. I luckily compiled and tested the add_one integer variant. But as soon as I added the add_one_float8 I couldn't link no more. My linker dies with. Undefined symbols: "_Float8GetDatum", referenced from: _add_one_float8 in foo.o ld: symbol(s) not found collect2: ld returned 1 exit status Following the documentation I only added "/Library/PostgreSQL/8.3/include/**" to my header search path. What else do I need to configure? Thanks for your help! steffn Environment used: OS X 10.5.5 XCode 3.1 Postgres 8.3.4 Same behavior under WinXP and Ubuntu. So IMHO I am clearly missing a point on configuring my build environment.
Steffn wrote: > Undefined symbols: > "_Float8GetDatum", referenced from: > _add_one_float8 in foo.o > ld: symbol(s) not found > collect2: ld returned 1 exit status > > Following the documentation I only added > "/Library/PostgreSQL/8.3/include/**" to my header search path. What else > do I need to configure? I'm not a "C" hacker, but that's failing at the linking stage, not the compiling stage. Are you missing the right lib to go with your headers? -- Richard Huxton Archonet Ltd
Hi! Thanks for your reply. Yes, thats also my suspicion. But what library to include? I added /Library/PostgreSQL/8.3/lib/** to my library search path, but it won't help. If I knew which library I have to add, I think I can figure out how to properly configure my build settings. Couldn't find any hints in the docu nor in the mailing list. Thanks, steffn Richard Huxton wrote, On 12/10/08 11:21 AM: > Steffn wrote: > >> Undefined symbols: >> "_Float8GetDatum", referenced from: >> _add_one_float8 in foo.o >> ld: symbol(s) not found >> collect2: ld returned 1 exit status >> >> Following the documentation I only added >> "/Library/PostgreSQL/8.3/include/**" to my header search path. What else >> do I need to configure? >> > > I'm not a "C" hacker, but that's failing at the linking stage, not the > compiling stage. Are you missing the right lib to go with your headers? > > >
> I added /Library/PostgreSQL/8.3/lib/** to my library search path, Try to add "-L/PostgreSQL/8.3/lib -lpg" options to linker's command line. You can get details with "ld --help". Good luck. ----------------------------------------------- Quan Zongliang quanzongliang@gmail.com CIT Japan: http://www.cit.co.jp CIT China: http://www.citbj.com.cn
Steffn wrote: > I am currently trying my first steps in writing my own functions in C. I > read through the documentation and tried the most simple examples as shown in > <http://www.postgresql.org/docs/8.3/static/xfunc-c.html>. Sadly > this was already the point where I stumbled. I luckily compiled and > tested the add_one integer variant. But as soon as I added the > add_one_float8 I couldn't link no more. My linker dies with. > > Undefined symbols: > "_Float8GetDatum", referenced from: > _add_one_float8 in foo.o > ld: symbol(s) not found > collect2: ld returned 1 exit status > > Following the documentation I only added > "/Library/PostgreSQL/8.3/include/**" to my header search path. What else > do I need to configure? I guess that the include path you need is /Library/PostgreSQL/8.3/include/server. Where in the documentation did you find the path? I read the following in http://www.postgresql.org/docs/8.3/static/xfunc-c.html#AEN40954 "Use pg_config --includedir-server to find out where the PostgreSQL server header files are installed on your system" What is the result of "pg_config --includedir-server" for you? Yours, Laurenz Albe
Steffn <steffn@gmx.at> writes: > Thanks for your reply. Yes, thats also my suspicion. But what library to > include? There is no library to include --- you need to be building *your* code as a library that can be loaded into the Postgres backend, which will supply the missing function. This is somewhat platform-specific and frankly I'd suggest using pgxs rather than puzzling it out for yourself. See http://www.postgresql.org/docs/8.3/static/xfunc-c.html#XFUNC-C-PGXS regards, tom lane