| 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: | Whole Thread | Raw Message | 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)
| 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 |