I have a part of the answer.
The library
CalcEph.
It is possible to use NASA kernels with it.
Here is an example
int _bRes ;
int j ;
double jd0 = 2415020.50 ; // 1-1-1900
double dt1 = 0.0 ;
t_calcephbin *pEph_1 ;
double PV[6] ;
/* open the ephemeris file */
pEph_1 = calceph_open("Ceres.bsp") ;
if(pEph_1)
{
memset(PV,0,sizeof(PV)) ;
_bRes = calceph_compute_unit(pEph_1,jd0,dt1,NAIFID_CERES,NAIFID_SUN,CALCEPH_USE_NAIFID+CALCEPH_UNIT_KM+CALCEPH_UNIT_SEC,PV) ;
/* close the ephemeris file */
calceph_close(pEph_1) ;
}
The results are
-----------------------------------------------------------------
CalcEph | JPL/HORIZONS |
-----------------------------------------------------------------
PV[0] = -5.33592e+06 | -5.360115439179360E+06 | X
PV[1] = -3.87096e+08 | -3.870962304665639E+08 | Y
PV[2] = -1.78922e+08 | -1.789169433649454E+08 | Z
PV[3] = 17.0183 | 1.701830983443931E+01 | VX
PV[4] = -0.00583934 | -6.781116030120477E-03 | VY
PV[5] = -3.48705 | -3.487487622121435E+00 | VZ
-----------------------------------------------------------------
I generate a kernel
hereThis kernel is heliocentric.
Now I have to test with DE430, DE431 and DE432 for having geocentric and topographic coordinates.