The following is valid for Singular 4-x-x: (for technical details see http://www.singular.uni-kl.de/Manual/modules.pdf) ./configure --disable-static .... make install --------------------------------------- how to compile and run the the example: libsingular-config --libs: gives the correct arguments for linking libsingular-config --cflags: gives the correct arguments for compiling g++ ...... -o tt tt.cc .... ./tt -------------------------------------- the example: #include main() { // init path names etc. siInit((char *)"/...lib/libSingular.so"); // construct the ring Z/32003[x,y,z] // the variable names char **n=(char**)omalloc(3*sizeof(char*)); n[0]=omStrDup("x"); n[1]=omStrDup("y"); n[2]=omStrDup("z2"); ring R=rDefault(32003,3,n); // make R the default ring: rChangeCurrRing(R); // create the polynomial 1 poly p1=p_ISet(1,R); // create tthe polynomial 2*x^3*z^2 poly p2=p_ISet(2,R); pSetExp(p2,1,3); pSetExp(p2,3,2); pSetm(p2); // print p1 + p2 pWrite(p1); printf(" + \n"); pWrite(p2); printf("\n"); // compute p1+p2 p1=p_Add_q(p1,p2,R); p2=NULL; pWrite(p1); // clean up: pDelete(&p1); rKill(R); currentVoice=feInitStdin(NULL); // hook for error handling: // WerrorS_callback=......; of type p(const char *) int err=iiAllStart(NULL,"int ver=system(\"version\");\n",BT_proc,0); if (err) errorreported = 0; // reset error handling printf("interpreter returns %d\n",err); idhdl h=ggetid("ver"); if (h!=NULL) printf("singular variable ver of type %d contains %d\n",h->typ,(int)(long)IDDATA(h)); else printf("variable ver does not exist\n"); // calling a singular-library function idhdl datetime=ggetid("datetime"); if (datetime==NULL) printf("datetime not found\n"); else { BOOLEAN res=iiMake_proc(datetime,NULL,NULL); if (res) { printf("datetime return an error\n"); errorreported = 0; } else printf("datetime returned type %d, >>%s<<\n",iiRETURNEXPR.Typ(),(char *)iiRETURNEXPR.Data()); } // changing a ring for the interpreter // re-using n and R from above R=rDefault(32003,3,n); idhdl newRingHdl=enterid("R" /* ring name*/, 0, /*nesting level, 0=global*/ RING_CMD, &IDROOT, FALSE); IDRING(newRingHdl)=R; // make R the default ring (include rChangeCurrRing): rSetHdl(newRingHdl); myynest=1; /* <=0: interactive at eof/ >=1: non-interactive */ err=iiAllStart(NULL,"poly p=x;listvar();return();\n",BT_proc,0); // calling a kernel function via the interpreter interface sleftv r1; memset(&r1,0,sizeof(r1)); sleftv arg; memset(&arg,0,sizeof(r1)); arg.rtyp=STRING_CMD; arg.data=omStrDup("huhu"); err=iiExprArith1(&r1,&arg,TYPEOF_CMD); printf("interpreter returns %d\n",err); if (err) errorreported = 0; // reset error handling else printf("typeof returned type %d, >>%s<<\n",r1.Typ(),r1.Data()); // clean up r1: r1.CleanUp(); }