As far as i can tell, my central registry isn't set up. After starting ECL and loading ASDF, when I check asdf:*central-registry*, it is empty.
It must be noted, however, that to get to :str package that I want to use, I must load :ecl-quicklisp, which adds path ~/quicklisp/quicklisp to the central registry. In any way, it doesn't seem that there is code of uiop in there. I have tried compiling with listing "asdf", "uiop" as dependencies to no success. The problem still persists. > Do you have the source code of uiop available in the central registry? > Quicklisp won't > download it, because asdf considers it being preloaded. Also, if so, do you > have uiop > listed as a dependency? > Alternatively you may add asdf as a dependency to your system. >Regards, >Daniel > >-- >Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland >TurtleWare - Daniel Kochmański | www.turtleware.eu > >"Be the change that you wish to see in the world." - Mahatma Gandhi > >‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐ >On Tuesday, 1 December 2020 22:01, Иван Трусков <trus19 at gmail.com> wrote: > >> Thank you very much. After rebuilding with newer version of ecl and with >> :init-name supplied compilation was a success. >> >> However, when i try to run the resulting executable, i get this error: >> >> Condition of type: SIMPLE-ERROR >> Package ((UIOP/STREAM . #<UIOP/STREAM package>)) referenced in compiled file >> NIL >> but has not been created >> >> Available restarts: >> >> 1. (IGNORE) Ignore the error, and try the operation again >> >> What should be done in this situation and how can i avoid it? Searching >> internet with this message did not yield any meaningful results (except for >> one Stackoverflow post that tells about having the same mistake). >> >> вт, 1 дек. 2020 г. в 22:15, Marius Gerbershagen <marius.gerbershagen at >> gmail.com>: >> >>> The generated library does indeed contain all systems that your library >>> contains on. The undefined references are init functions, which need to >>> be called via ecl_init_module after cl_boot to initialize the compiled >>> libraries (see >>> https://common-lisp.net/project/ecl/static/manual/System-building.html#Build-it-as-shared-library-and-use-in-C >>> for more details). >>> >>> Since you didn't specify an explicit init name yourself, init functions >>> are automatically generated for each system contained in the final >>> library. When compiling a monolithic library, it is preferable to >>> specify an explicit init name yourself, for example as >>> >>> (asdf:make-build :embedded-console :type :static-library :move-here >>> #P"/my/output/dir" :monolithic t :init-name "init_lib_embedded_console") >>> >>> and then invoke it using >>> >>> extern void init_lib_embedded_console(cl_object); >>> /* ... */ >>> cl_boot(argc, argv); >>> ecl_init_module(NULL, init_lib_embedded_console); >>> >>> Am 29.11.20 um 13:17 schrieb Иван Трусков: >>>> Hello. I am trying to make a library that makes use of 'STR' package and >>>> link it into my C program. >>>> I presumed that using :monolithic t flag would result in the static >>>> library that contained all systems my library depends on. However it >>>> seems that is not the case. >>>> >>>> Here is my .asd file: >>>> >>>> (defsystem "embedded-console" >>>> :description "embedded console - ECL functions for smart snake game" >>>> :author "Ivan Truskov <trus19 at gmail.com <mailto:trus19 at gmail.com>>" >>>> :components ((:file "embedded-console")) >>>> :depends-on ("str")) >>>> >>>> I am compiling the library with command: >>>> >>>> ecl -norc -eval '(require :ecl-quicklisp)' >>>> -eval '(push \"/my/src/dir/\" asdf:*central-registry*)' >>>> -eval '(asdf:make-build :embedded-console :type >>>> :static-library :move-here \#P\"/my/output/dir}\" :monolithic t )' >>>> -eval '(quit)' >>>> >>>> However, when i try to link with resulting library, this is what i get: >>>> >>>> ... undefined reference to `init_lib_CL_PPCRE' >>>> ... undefined reference to `init_lib_BASE' >>>> ... undefined reference to `init_lib_CL_UNICODE' >>>> ... undefined reference to `init_lib_CL_PPCRE_UNICODE' >>>> ... undefined reference to `init_lib_CL_CHANGE_CASE' >>>> ... undefined reference to `init_lib_STR' >>>> ... undefined reference to `init_lib_EMBEDDED_CONSOLE' >>>> >>>> And indeed, when i run nm over the built file >>>> embedded-console--all-systems.a, this is output: >>>> >>>> eclinitVtJU9J.o: >>>> 0000000000000000 b Cblock.10857 >>>> U cl_boot >>>> U cl_symbols >>>> U _ecl_frs_push >>>> U ecl_init_module >>>> U ecl_make_codeblock >>>> U ecl_process_env >>>> U _GLOBAL_OFFSET_TABLE_ >>>> U init_lib_BASE >>>> U init_lib_CL_CHANGE_CASE >>>> U init_lib_CL_PPCRE >>>> U init_lib_CL_PPCRE_UNICODE >>>> U init_lib_CL_UNICODE >>>> U init_lib_EMBEDDED_CONSOLE >>>> 0000000000000000 T init_lib_EMBEDDED_CONSOLE__ALL_SYSTEMS >>>> U init_lib_STR >>>> 0000000000000110 T main_lib_EMBEDDED_CONSOLE__ALL_SYSTEMS >>>> U _setjmp >>>> nm: cl-ppcre.a: File format not recognized >>>> nm: base.a: File format not recognized >>>> nm: cl-unicode.a: File format not recognized >>>> nm: cl-ppcre-unicode.a: File format not recognized >>>> nm: cl-change-case.a: File format not recognized >>>> nm: str.a: File format not recognized >>>> nm: embedded-console.a: File format not recognized >>>> >>>> What am i doing wrong? What should i change to get static library >>>> containing all systems i am intending to use (and maybe only them, if >>>> possible)?