Thread: Missing plpgsql.o Symbols on OS X
Hackers, I’m trying to build Pavel’s plpgsql_check against the 9.4 beta on OS X 10.9, but get these errors: make gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute-Wformat-security -fno-strict-aliasing -fwrapv -I/usr/local/pgsql/lib/pgxs/src/makefiles/../../src/pl/plpgsql/src-bundle -multiply_defined suppress -o plpgsql_check.soplpgsql_check.o -L/usr/local/pgsql/lib -L/usr/local/lib -L/usr/local/lib -Wl,-dead_strip_dylibs -bundle_loader/usr/local/pgsql/bin/postgres Undefined symbols for architecture x86_64:"_exec_get_datum_type", referenced from: _check_target in plpgsql_check.o"_plpgsql_build_datatype",referenced from: _check_stmt in plpgsql_check.o"_plpgsql_compile", referencedfrom: _check_plpgsql_function in plpgsql_check.o"_plpgsql_parser_setup", referenced from: _prepare_expr inplpgsql_check.o"_plpgsql_stmt_typename", referenced from: _put_error in plpgsql_check.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [plpgsql_check.so] Error 1 Which is odd, because plpgsql_check.c includes plpgsql.h, and those symbols do appear to be in plpgsql.so: $ nm /usr/local/pgsql/lib/plpgsql.so | grep _exec_get_datum_type 000000000000f110 T _exec_get_datum_type 000000000000f380 T _exec_get_datum_type_info So, uh, what gives? Do I need to something extra to get it to properly find plpgsql.so? Thanks, David
"David E. Wheeler" <david@justatheory.com> writes: > Hackers, > I�m trying to build Pavel�s plpgsql_check against the 9.4 beta on OS X 10.9, but get these errors: > make > gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute-Wformat-security -fno-strict-aliasing -fwrapv -I/usr/local/pgsql/lib/pgxs/src/makefiles/../../src/pl/plpgsql/src-bundle -multiply_defined suppress -o plpgsql_check.soplpgsql_check.o -L/usr/local/pgsql/lib -L/usr/local/lib -L/usr/local/lib -Wl,-dead_strip_dylibs -bundle_loader/usr/local/pgsql/bin/postgres > Undefined symbols for architecture x86_64: > "_exec_get_datum_type", referenced from: > _check_target in plpgsql_check.o > "_plpgsql_build_datatype", referenced from: > _check_stmt in plpgsql_check.o > "_plpgsql_compile", referenced from: > _check_plpgsql_function in plpgsql_check.o > "_plpgsql_parser_setup", referenced from: > _prepare_expr in plpgsql_check.o > "_plpgsql_stmt_typename", referenced from: > _put_error in plpgsql_check.o > ld: symbol(s) not found for architecture x86_64 > clang: error: linker command failed with exit code 1 (use -v to see invocation) > make: *** [plpgsql_check.so] Error 1 > Which is odd, because plpgsql_check.c includes plpgsql.h, and those symbols do appear to be in plpgsql.so: > $ nm /usr/local/pgsql/lib/plpgsql.so | grep _exec_get_datum_type > 000000000000f110 T _exec_get_datum_type > 000000000000f380 T _exec_get_datum_type_info Yeah, but plpgsql.so is mentioned nowhere on your command line. I'm not too sure about the dynamic-linking rules on OS X, but I'd not be surprised if you need to provide a reference to plpgsql.so in its final installed location (ie, a reference to it in the build tree may appear to link and then fail at runtime). regards, tom lane
Please add -arch x86_64 to your LD_FLAGS and CFLAGS in your make file.
On Wed, Aug 27, 2014 at 9:29 PM, David E. Wheeler <david@justatheory.com> wrote:
Hackers,$ nm /usr/local/pgsql/lib/plpgsql.so | grep _exec_get_datum_type
I’m trying to build Pavel’s plpgsql_check against the 9.4 beta on OS X 10.9, but get these errors:
make
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -I/usr/local/pgsql/lib/pgxs/src/makefiles/../../src/pl/plpgsql/src -bundle -multiply_defined suppress -o plpgsql_check.so plpgsql_check.o -L/usr/local/pgsql/lib -L/usr/local/lib -L/usr/local/lib -Wl,-dead_strip_dylibs -bundle_loader /usr/local/pgsql/bin/postgres
Undefined symbols for architecture x86_64:
"_exec_get_datum_type", referenced from:
_check_target in plpgsql_check.o
"_plpgsql_build_datatype", referenced from:
_check_stmt in plpgsql_check.o
"_plpgsql_compile", referenced from:
_check_plpgsql_function in plpgsql_check.o
"_plpgsql_parser_setup", referenced from:
_prepare_expr in plpgsql_check.o
"_plpgsql_stmt_typename", referenced from:
_put_error in plpgsql_check.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [plpgsql_check.so] Error 1
Which is odd, because plpgsql_check.c includes plpgsql.h, and those symbols do appear to be in plpgsql.so:000000000000f110 T _exec_get_datum_type
000000000000f380 T _exec_get_datum_type_info
So, uh, what gives? Do I need to something extra to get it to properly find plpgsql.so?
Thanks,
David
On Aug 27, 2014, at 9:53 PM, Ashesh Vashi <ashesh.vashi@enterprisedb.com> wrote: > Please add -arch x86_64 to your LD_FLAGS and CFLAGS in your make file. This made no difference: LDFLAGS = -arch x86_64 CFLAGS = -arch x86_64 Best, David
On Aug 27, 2014, at 4:20 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Yeah, but plpgsql.so is mentioned nowhere on your command line. > > I'm not too sure about the dynamic-linking rules on OS X, but I'd not be > surprised if you need to provide a reference to plpgsql.so in its final > installed location (ie, a reference to it in the build tree may appear to > link and then fail at runtime). Ah. Is there a recommended way to do that in a PGXS-powered Makefile? Thanks, David