Loading a c++ function in kdb causes error undefined symbol:

I am trying to load a c++  dll into kdb to read data from a  database .  I have compiled a .so file successfully and have a function defined that should return K objects called getkobj.

When I try to load it usin

getobj:($"/home/Models/Code/makeKDBObj") 2:(getkobj;1)

I get an error

'/home/Models/Code/makeKDBObj.so: undefined symbol: _ZN10makeKDBObjC1Ev

I have a header file

#include “k.h”

class makeKDBObj

 {

  public:

      makeKDBObj();

      virtual KK getkobj(KK FileName);

 };

and a cpp file

#include “makeKDBObj.hpp”

extern “C” makeKDBObj* create_object()

{

  return new makeKDBObj;

}

extern “C” void destroy_object(makeKDBObj* object )

{

  delete object;

}

KK getkobj (KK FileName)

{…..

 }

I can find the symbol in the file

nm -gC makeKDBObj.so | grep getkobj

00000000000047a0 T getkobj(k0*)

Can you see anything that I might be doing wrong?

Thanks very much.

Change:

KK getkobj (KK FileName)

{…..

 }

to:

KK makeKDBObj::getkobj (KK FileName)

{

    …

 }

On Friday, May 1, 2015 at 12:55:04 AM UTC+9:30, Guy Pitman wrote:

I am trying to load a c++  dll into kdb to read data from a  database .  I have compiled a .so file successfully and have a function defined that should return K objects called getkobj.

When I try to load it usin

getobj:($"/home/Models/Code/<wbr>makeKDBObj") 2:(getkobj;1)

I get an error

'/home/Models/Code/makeKDBObj.so: undefined symbol: _ZN10makeKDBObjC1Ev

I have a header file

#include “k.h”

class makeKDBObj

 {

  public:

      makeKDBObj();

      virtual KK getkobj(KK FileName);

 };

and a cpp file

#include “makeKDBObj.hpp”

extern “C” makeKDBObj* create_object()

{

  return new makeKDBObj;

}

extern “C” void destroy_object(makeKDBObj* object )

{

  delete object;

}

KK getkobj (KK FileName)

{…..

 }

I can find the symbol in the file

nm -gC makeKDBObj.so | grep getkobj

00000000000047a0 T getkobj(k0*)

Can you see anything that I might be doing wrong?

Thanks very much.

I have got it loading by moving the definition of getkobj to the header.  and commenting out

      //makeKDBObj();

  in the class makeKDBObj()

However now I get a memory fault running it.  The dll appends atoms onto kdb lists and crashes after adding the second item to the lists.

    *** glibc detected *** ./makeKDBObj: double free or corruption (!prev): 0x000000001f2a2a60 ***

======= Backtrace: =========

/lib64/libc.so.6[0x3768e714af]

/lib64/libc.so.6(cfree+0x4b)[0x3768e757ab]

/lib64/libc.so.6(fclose+0x14b)[0x3768e5fd5b]

./makeKDBObj(_Z7getkobjv+0x180d)[0x40529d]

./makeKDBObj(main+0x9)[0x4038f9]

/lib64/libc.so.6(__libc_start_main+0xf4)[0x3768e1d9f4]

./makeKDBObj[0x403961]

======= Memory map: ========

00400000-0040c000 r-xp 00000000 fd:00 10991196                           /home/Models/Code/makeKDBObj

0060c000-0060d000 rw-p 0000c000 fd:00 10991196                           /home/Models/Code/makeKDBObj

0060d000-00610000 rw-p 0060d000 00:00 0 

1efbc000-1f7f8000 rw-p 1efbc000 00:00 0                                  [heap]

3768a00000-3768a1c000 r-xp 00000000 fd:00 3957207                        /lib64/ld-2.5.so

3768c1c000-3768c1d000 r–p 0001c000 fd:00 3957207                        /lib64/ld-2.5.so

3768c1d000-3768c1e000 rw-p 0001d000 fd:00 3957207                        /lib64/ld-2.5.so

3768e00000-3768f4f000 r-xp 00000000 fd:00 3957208                        /lib64/libc-2.5.so

3768f4f000-376914f000 —p 0014f000 fd:00 3957208                        /lib64/libc-2.5.so

376914f000-3769153000 r–p 0014f000 fd:00 3957208                        /lib64/libc-2.5.so

3769153000-3769154000 rw-p 00153000 fd:00 3957208                        /lib64/libc-2.5.so

3769154000-3769159000 rw-p 3769154000 00:00 0 

3769200000-3769282000 r-xp 00000000 fd:00 3957221                        /lib64/libm-2.5.so

3769282000-3769481000 —p 00082000 fd:00 3957221                        /lib64/libm-2.5.so

3769481000-3769482000 r–p 00081000 fd:00 3957221                        /lib64/libm-2.5.so

3769482000-3769483000 rw-p 00082000 fd:00 3957221                        /lib64/libm-2.5.so

3769600000-3769602000 r-xp 00000000 fd:00 3957210                        /lib64/libdl-2.5.so

3769602000-3769802000 —p 00002000 fd:00 3957210                        /lib64/libdl-2.5.so

3769802000-3769803000 r–p 00002000 fd:00 3957210                        /lib64/libdl-2.5.so

3769803000-3769804000 rw-p 00003000 fd:00 3957210                        /lib64/libdl-2.5.so

3769a00000-3769a16000 r-xp 00000000 fd:00 3957478                        /lib64/libpthread-2.5.so

3769a16000-3769c16000 —p 00016000 fd:00 3957478                        /lib64/libpthread-2.5.so

3769c16000-3769c17000 r–p 00016000 fd:00 3957478                        /lib64/libpthread-2.5.so

3769c17000-3769c18000 rw-p 00017000 fd:00 3957478                        /lib64/libpthread-2.5.so

3769c18000-3769c1c000 rw-p 3769c18000 00:00 0 

3769e00000-3769e14000 r-xp 00000000 fd:00 3957494                        /lib64/libz.so.1.2.3

3769e14000-376a013000 —p 00014000 fd:00 3957494                        /lib64/libz.so.1.2.3

376a013000-376a014000 rw-p 00013000 fd:00 3957494                        /lib64/libz.so.1.2.3

376c600000-376c67f000 r-xp 00000000 fd:00 3224163                        /usr/lib64/libfreetype.so.6.3.10

376c67f000-376c87f000 —p 0007f000 fd:00 3224163                        /usr/lib64/libfreetype.so.6.3.10

376c87f000-376c884000 rw-p 0007f000 fd:00 3224163                        /usr/lib64/libfreetype.so.6.3.10

3778400000-377840d000 r-xp 00000000 fd:00 3957461                        /lib64/libgcc_s-4.1.2-20080825.so.1

377840d000-377860d000 —p 0000d000 fd:00 3957461                        /lib64/libgcc_s-4.1.2-20080825.so.1

377860d000-377860e000 rw-p 0000d000 fd:00 3957461                        /lib64/libgcc_s-4.1.2-20080825.so.1

377a000000-377a009000 r-xp 00000000 fd:00 3957493                        /lib64/libcrypt-2.5.so

377a009000-377a208000 —p 00009000 fd:00 3957493                        /lib64/libcrypt-2.5.so

377a208000-377a209000 r–p 00008000 fd:00 3957493                        /lib64/libcrypt-2.5.so

377a209000-377a20a000 rw-p 00009000 fd:00 3957493                        /lib64/libcrypt-2.5.so

377a20a000-377a238000 rw-p 377a20a000 00:00 0 

377bc00000-377bc4e000 r-xp 00000000 fd:00 3212349                        /usr/lib64/libncurses.so.5.5

377bc4e000-377be4e000 —p 0004e000 fd:00 3212349                        /usr/lib64/libncurses.so.5.5

377be4e000-377be5c000 rw-p 0004e000 fd:00 3212349                        /usr/lib64/libncurses.so.5.5

377be5c000-377be5d000 rw-p 377be5c000 00:00 0 

2b51eda9b000-2b51eda9d000 rw-p 2b51eda9b000 00:00 0 

2b51eda9d000-2b51ee163000 r-xp 00000000 fd:00 11813662                   /home/Root/root/lib/libCore.so

2b51ee163000-2b51ee363000 —p 006c6000 fd:00 11813662                   /home/Root/root/lib/libCore.so

2b51ee363000-2b51ee39a000 rw-p 006c6000 fd:00 11813662                   /home/Root/root/lib/libCore.so

2b51ee39a000-2b51ee41a000 rw-p 2b51ee39a000 00:00 0 

2b51ee41a000-2b51ee654000 r-xp 00000000 fd:00 11813575                   /home/Root/root/lib/libCint.so

2b51ee654000-2b51ee853000 —p 0023a000 fd:00 11813575                   /home/Root/root/lib/libCint.so

2b51ee853000-2b51ee85b000 rw-p 00239000 fd:00 11813575                   /home/Root/root/lib/libCint.so

2b51ee85b000-2b51eed94000 rw-p 2b51ee85b000 00:00 0 

2b51eed94000-2b51eef51000 r-xp 00000000 fd:00 11813727                   /home/Root/root/lib/libRIO.so

2b51eef51000-2b51ef151000 —p 001bd000 fd:00 11813727                   /home/Root/root/lib/libRIO.so

2b51ef151000-2b51ef15b000 rw-p 001bd000 fd:00 11813727                   /home/Root/root/lib/libRIO.so

2b51ef15b000-2b51ef15d000 rw-p 2b51ef15b000 00:00 0 

2b51ef15d000-2b51ef288000 r-xp 00000000 fd:00 11813893                   /home/Root/root/lib/libNet.so

2b51ef288000-2b51ef488000 —p 0012b000 fd:00 11813893                   /home/Root/root/lib/libNet.so

2b51ef488000-2b51ef496000 rw-p 0012b000 fd:00 11813893                   /home/Root/root/lib/libNet.so

2b51ef496000-2b51ef498000 rw-p 2b51ef496000 00:00 0 

2b51ef498000-2b51ef8da000 r-xp 00000000 fd:00 11813937                   /home/Root/root/lib/libHist.so

2b51ef8da000-2b51efada000 —p 00442000 fd:00 11813937                   /home/Root/root/lib/libHist.so

2b51efada000-2b51efb00000 rw-p 00442000 fd:00 11813937                   /home/Root/root/lib/libHist.so

2b51efb00000-2b51efb08000 rw-p 2b51efb00000 00:00 0 

2b51efb08000-2b51efca7000 r-xp 00000000 fd:00 11814035                   /home/Root/root/lib/libGraf.so

2b51efca7000-2b51efea6000 —p 0019f000 fd:00 11814035                   /home/Root/root/lib/libGraf.so

2b51efea6000-2b51efeb6000 rw-p 0019e000 fd:00 11814035                   /home/Root/root/lib/libGraf.so

2b51efeb6000-2b51efec3000 rw-p 2b51efeb6000 00:00 0 

2b51efec3000-2b51effdf000 r-xp 00000000 fd:00 11814037                   /home/Root/root/lib/libGraf3d.so

2b51effdf000-2b51f01df000 —p 0011c000 fd:00 11814037                   /home/Root/root/lib/libGraf3d.so

2b51f01df000-2b51f01eb000 rw-p 0011c000 fd:00 11814037                   /home/Root/root/lib/libGraf3d.so

2b51f01eb000-2b51f01ef000 rw-p 2b51f01eb000 00:00 0 

2b51f01ef000-2b51f02d7000 r-xp 00000000 fd:00 11814036                   /home/Root/root/lib/libGpad.so

2b51f02d7000-2b51f04d7000 —p 000e8000 fd:00 11814036                   /home/Root/root/lib/libGpad.so

2b51f04d7000-2b51f04e2000 rw-p 000e8000 fd:00 11814036                   /home/Root/root/lib/libGpad.so

2b51f04e2000-2b51f04e5000 rw-p 2b51f04e2000 00:00 0 

2b51f04e5000-2b51f06ea000 r-xp 00000000 fd:00 11814034                   /home/Root/root/lib/libTree.so

2b51f06ea000-2b51f08e9000 —p 00205000 fd:00 11814034                   /home/Root/root/lib/libTree.so

2b51f08e9000-2b51f08fc000 rw-p 00204000 fd:00 11814034                   /home/Root/root/lib/libTree.so

2b51f08fc000-2b51f0900000 rw-p 2b51f08fc000 00:00 0 

2b51f0900000-2b51f0932000 r-xp 00000000 fd:00 11814160                   /home/Root/root/lib/libRint.so

2b51f0932000-2b51f0b31000 —p 00032000 fd:00 11814160                   /home/Root/root/lib/libRint.so

2b51f0b31000-2b51f0b34000 rw-p 00031000 fd:00 11814160                   /home/Root/root/lib/libRint.so

2b51f0b34000-2b51f0b82000 r-xp 00000000 fd:00 11814159                   /home/Root/root/lib/libPostscript.so

2b51f0b82000-2b51f0d81000 —p 0004e000 fd:00 11814159                   /home/Root/root/lib/libPostscript.so

2b51f0d81000-2b51f0d85000 rw-p 0004d000 fd:00 11814159                   /home/Root/root/lib/libPostscript.so

2b51f0d85000-2b51f0d86000 rw-p 2b51f0d85000 00:00 0 

2b51f0d86000-2b51f0fd6000 r-xp 00000000 fd:00 11813935                   /home/Root/root/lib/libMatrix.so

2b51f0fd6000-2b51f11d5000 —p 00250000 fd:00 11813935                   /home/Root/root/lib/libMatrix.so

2b51f11d5000-2b51f11e3000 rw-p 0024f000 fd:00 11813935                   /home/Root/root/lib/libMatrix.so

2b51f11e3000-2b51f11e7000 rw-p 2b51f11e3000 00:00 0 

2b51f11e7000-2b51f1286000 r-xp 00000000 fd:00 11814158                   /home/Root/root/lib/libPhysics.so

2b51f1286000-2b51f1485000 —p 0009f000 fd:00 11814158                   /home/Root/root/lib/libPhysics.so

2b51f1485000-2b51f148b000 rw-p 0009e000 fd:00 11814158                   /home/Root/root/lib/libPhysics.so

2b51f148b000-2b51f1680000 r-xp 00000000 fd:00 11813832                   /home/Root/root/lib/libMathCore.so

2b51f1680000-2b51f1880000 —p 001f5000 fd:00 11813832                   /home/Root/root/lib/libMathCore.so

2b51f1880000-2b51f188c000 rw-p 001f5000 fd:00 11813832                   /home/Root/root/lib/libMathCore.so

2b51f188c000-2b51f1893000 rw-p 2b51f188c000 00:00 0 

2b51f1893000-2b51f18e2000 r-xp 00000000 fd:00 11813894                   /home/Root/root/lib/libThread.so

2b51f18e2000-2b51f1ae1000 —p 0004f000 fd:00 11813894                   /home/Root/root/lib/libThread.so

2b51f1ae1000-2b51f1ae6000 rw-p 0004e000 fd:00 11813894                   /home/Root/root/lib/libThread.so

2b51f1ae6000-2b51f1aff000 rw-p 2b51f1ae6000 00:00 0 

2b51f1aff000-2b51f1b81000 r-xp 00000000 fd:00 11814053                   /home/Root/root/lib/libMinuit.so

2b51f1b81000-2b51f1d80000 —p 00082000 fd:00 11814053                   /home/Root/root/lib/libMinuit.so

2b51f1d80000-2b51f1d84000 rw-p 00081000 fd:00 11814053                   /home/Root/root/lib/libMinuit.so

2b51f1d84000-2b51f1d86000 rw-p 2b51f1d84000 00:00 0 

2b51f1d86000-2b51f1fb2000 r-xp 00000000 fd:00 53438355                   /home/Root/root/lib/libGenVector.so

2b51f1fb2000-2b51f21b1000 —p 0022c000 fd:00 53438355                   /home/Root/root/lib/libGenVector.so

2b51f21b1000-2b51f21b5000 rw-p 0022b000 fd:00 53438355                   /home/Root/root/lib/libGenVector.so

2b51f21b5000-2b51f21bb000 rw-p 2b51f21b5000 00:00 0 

2b51f21bb000-2b51f249e000 r-xp 00000000 fd:00 10404921                   /home/Madgraph/MG5_aMC_v2_2_2/Delphes/libDelphes.so

2b51f249e000-2b51f269d000 —p 002e3000 fd:00 10404921                   /home/Madgraph/MG5_aMC_v2_2_2/Delphes/libDelphes.so

2b51f269d000-2b51f26b9000 rw-p 002e2000 fd:00 10404921                   /home/Madgraph/MG5_aMC_v2_2_2/Delphes/libDelphes.so

2b51f26b9000-2b51f26c5000 rw-p 2b51f26b9000 00:00 0 

2b51f26c5000-2b51f272a000 r-xp 00000000 fd:00 11814200                   /home/Root/root/lib/libEG.so

2b51f272a000-2b51f292a000 —p 00065000 fd:00 11814200                   /home/Root/root/lib/libEG.so

2b51f292a000-2b51f292e000 rw-p 00065000 fd:00 11814200                   /home/Root/root/lib/libEG.so

2b51f292e000-2b51f298d000 rw-p 2b51f292e000 00:00 0 

2b51f298d000-2b51f2a6d000 r-xp 00000000 fd:00 3220689                    /usr/lib64/libstdc++.so.6.0.16

2b51f2a6d000-2b51f2c6c000 —p 000e0000 fd:00 3220689                    /usr/lib64/libstdc++.so.6.0.16

2b51f2c6c000-2b51f2c74000 r–p 000df000 fd:00 3220689                    /usr/lib64/libstdc++.so.6.0.16

2b51f2c74000-2b51f2c76000 rw-p 000e7000 fd:00 3220689                    /usr/lib64/libstdc++.so.6.0.16

2b51f2c76000-2b51f2c93000 rw-p 2b51f2c76000 00:00 0 

2b51f2c93000-2b51f2c9d000 r-xp 00000000 fd:00 3957438                    /lib64/libnss_files-2.5.so

2b51f2c9d000-2b51f2e9c000 —p 0000a000 fd:00 3957438                    /lib64/libnss_files-2.5.so

2b51f2e9c000-2b51f2e9d000 r–p 00009000 fd:00 3957438                    /lib64/libnss_files-2.5.so

2b51f2e9d000-2b51f2e9e000 rw-p 0000a000 fd:00 3957438                    /lib64/libnss_files-2.5.so

2b51f2e9e000-2b51f2fca000 rw-p 2b51f2e9e000 00:00 0 

2b51f2ff4000-2b51f3066000 rw-p 2b51f2ff4000 00:00 0 

7fff4f701000-7fff4f73d000 rw-p 7ffffffc2000 00:00 0                      [stack]

ffffffffff600000-ffffffffffe00000 —p 00000000 00:00 0                  [vdso]

Aborted