BUG #14215: External C function link failed on Mac OSX

From: max(dot)fomitchev(at)gmail(dot)com
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #14215: External C function link failed on Mac OSX
Date: 2016-06-26 09:27:21
Message-ID: 20160626092721.17236.73734@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 14215
Logged by: Max Fomitchev
Email address: max(dot)fomitchev(at)gmail(dot)com
PostgreSQL version: 9.5.3
Operating system: OSX
Description:

Example code main.cpp:

extern "C" {
#include <postgres.h>
#include <fmgr.h>
#include <utils/array.h>
#include <utils/lsyscache.h>
#include <catalog/pg_type.h>

#ifdef PG_MODULE_MAGIC
PG_MODULE_MAGIC;
#endif

PG_FUNCTION_INFO_V1(psql_nearest);
Datum psql_nearest(PG_FUNCTION_ARGS) {
if(PG_ARGISNULL(0) || PG_ARGISNULL(1)) {
elog(ERROR, "DOC2VEC: NULL INPUT DATA");
PG_RETURN_NULL();
}

ArrayType *_docVector = PG_GETARG_ARRAYTYPE_P(0);
Oid elTypeVals = ARR_ELEMTYPE(_docVector);
if (elTypeVals != FLOAT4OID) {
elog(ERROR, "DOC2VEC: INVALID INPUT DATA TYPE");
PG_RETURN_NULL();
}

int16 typeLenVals = 0;
bool typeByValVals = false;
char typeAlignVals = char(0);
get_typlenbyvalalign(elTypeVals, &typeLenVals, &typeByValVals,
&typeAlignVals);

Datum *inputVals;
bool *nullVals;
int nVals;
deconstruct_array(_docVector, elTypeVals, typeLenVals,
typeByValVals, typeAlignVals, &inputVals, &nullVals, &nVals);

pfree(inputVals);
pfree(nullVals);

PG_RETURN_NULL();
}
}

Compiling:
c++ -I/usr/local/Cellar/postgresql/9.5.3/include/server -fpic -c
./main.cpp

Linking:
c++ -shared -o ttt.dylib main.o
Undefined symbols for architecture x86_64:
"_deconstruct_array", referenced from:
_psql_nearest in main.o
"_elog_finish", referenced from:
_psql_nearest in main.o
"_elog_start", referenced from:
_psql_nearest in main.o
"_get_typlenbyvalalign", referenced from:
_psql_nearest in main.o
"_pfree", referenced from:
_psql_nearest in main.o
"_pg_detoast_datum", referenced from:
_psql_nearest in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2016-06-26 15:22:55 Re: BUG #14215: External C function link failed on Mac OSX
Previous Message Peter Geoghegan 2016-06-25 19:05:47 Re: BUG #14210: filter by "=" constraint doesn't work when hash index is present on a column