[Ecls-list] non monolithic :dll builds fail on linking to program

Seth Burleigh seth at tewebs.com
Sat Jun 19 21:59:07 UTC 2010


Im building this with the command gcc test-meta.c -lecl -lmeta

#include <ecl/ecl.h>

void init_lib_META(cl_object);
int main(int argc, char **argv)  {
  //ecl_set_option(ECL_OPT_FRAME_STACK_SIZE,100000);
  cl_boot(argc, argv);
  cl_object obj=c_string_to_object("\"Hello world\"");
  read_VV(OBJNULL,init_lib_META);
  cl_pprint(1,obj);
  cl_shutdown();
}

I have made meta into a .so file (note that in my ecl build, i do not
have support for dffi because for some reason, even though it is there,
it cant find ffi/ff.h during configure)

So, when i run it, i get:


FRAME-STACK overflow at size 2304. Stack can probably be resized.
Available restarts:

1. (CONTINUE) Extend stack size

Broken at NIL. In: #<process SI:TOP-LEVEL 088aefc0>.
>> 


Now, if i instead make meta into a static library (libmeta.a) using the
below command it succeeds just fine. 
(asdf:make-build :meta :type :lib :move-here "~/devel/")

However, if i build the .so file with :monolithic t , everything works
fine if i change above code to initialize lib_META_MONO.

(asdf:make-build :meta :type :dll :monolithic t :move-here "~/devel/")
The static library works either way, monolithic doesn't matter there. 


I would prefer  to keep the .so file non monolithic for later on when it
will depend on large libraries.



Here is the test code:

meta.lisp:
(in-package :meta)
(defun add (a b)
  (+ a b))

meta.asd:
(defsystem :meta
    :serial t
    :components
    ((:file "package")
     (:file "meta"))
    )

package.lisp:
(defpackage :meta (:use :cl))
















More information about the ecl-devel mailing list