<div dir="ltr">Hi again,<br><br>Compiling the files manually with 'compile-file' and building the shared library with 'c:build-shared-library' works on Windows as well:<br><br>---<br><div>(ext:install-c-compiler)<br>
(compile-file "hello-lisp.lisp" :c-file "hello-lisp.c" :h-file "hello-lisp.h" :data-file "hello-lisp.data" :system-p t)<br>(c:build-shared-library "hello-lisp" :lisp-files '("hello-lisp.obj") :init-name "init_lib_HELLO_LISP")<br>
(quit)<br>---</div><div><br></div><div>I suppose that '<span style="font-size:13px;font-family:arial,sans-serif">asdf:make-build' is based on the same functions and wonder why it didn't work...</span><br></div>
<div><span style="font-size:13px;font-family:arial,sans-serif"><br></span></div><div>The example sources which work on my Windows installation can be found here: <a href="http://formgames.org/lisp/ecl/examples/shared-library.tar.gz">http://formgames.org/lisp/ecl/examples/shared-library.tar.gz</a></div>
<div><br></div><div style><div><span style="font-family:arial,sans-serif;font-size:13px">I made a wiki page for my own entertainment: </span><a href="http://formgames.org/wiki/ECL/Building_libraries">http://formgames.org/wiki/ECL/Building_libraries</a> :)</div>
<div><br></div></div><div style><span style="font-family:arial,sans-serif;font-size:13px">If you think that it makes sense to publish it on the ECL wiki, please let me know.</span></div><div style><span style="font-family:arial,sans-serif;font-size:13px"><br>
</span></div><div style><span style="font-family:arial,sans-serif;font-size:13px">Thanks for your help,</span></div><div style><span style="font-family:arial,sans-serif;font-size:13px"><br></span></div><div style><span style="font-family:arial,sans-serif;font-size:13px">Dietrich</span></div>
<div style><br></div><div><br>On Tue, Jun 25, 2013 at 12:26 AM, Dietrich Bollmann <<a href="mailto:dietrich@formgames.org">dietrich@formgames.org</a>> wrote:<br>><br>> Hi Juanjo,<br>><br>> Sorry for being unclear!<br>
><br>> The example sources in embed-windows.tar from the email<br>><br>>   - Re: [Ecls-list] Example about building / loading ECL libraries<br>>     <a href="http://sourceforge.net/mailarchive/message.php?msg_id=30912414">http://sourceforge.net/mailarchive/message.php?msg_id=30912414</a><br>
><br>> (see 'embed-windows.tar', <a href="http://sourceforge.net/mailarchive/attachment.php?list_name=ecls-list&message_id=CAMCvb%3DAZ4XtzpQ3kwc7qhjctNXTc5bhqWP0s4-cHVnhxXKf6AQ%40mail.gmail.com&counter=2">http://sourceforge.net/mailarchive/attachment.php?list_name=ecls-list&message_id=CAMCvb%3DAZ4XtzpQ3kwc7qhjctNXTc5bhqWP0s4-cHVnhxXKf6AQ%40mail.gmail.com&counter=2</a> )<br>
><br>> show how to compile the files hello-lisp.asd and hello-lisp.lisp on Windows into the static library hello-lisp.lib which than is used to build hello.exe from hello.c.<br>><br>> the line<br>><br>> ecl -norc -load compile.lisp<br>
><br>> in the Makefile is responsible for building the static library based on the lisp build file compile.lisp:<br>><br>> === compile.lisp ===<br>> (ext:install-c-compiler)<br>> (require :asdf)<br>> (push "./" asdf:*central-registry*)<br>
> (asdf:make-build :hello-lisp :type :static-library :move-here "./")<br>> (quit)<br>> ===<br>><br>> So my fist and probably naive attempt to build a shared library was to change ':type :static-library' to ':type :shared-library' resulting in the following file:<br>
><br>> === compile.lisp ===<br>> (ext:install-c-compiler)<br>> (require :asdf)<br>> (push "./" asdf:*central-registry*)<br>> (asdf:make-build :hello-lisp :type :shared-library :move-here "./")<br>
> (quit)<br>> ===<br>><br>> But unfortunately nothing happens when trying to use this file to build a shared library:<br>><br>> $ ls -la<br>><br>> total 28<br>> drwxr-xr-x 1 dietrich    0 Jan  1  1970 .<br>
> drwxr-xr-x 1 dietrich    0 Jan  1  1970 ..<br>> -rw-r--r-- 1 dietrich  636 Jun 24 23:44 compile.lisp<br>> -rw-r--r-- 1 dietrich  453 Jun 24 23:44 hello.c<br>> -rw-r--r-- 1 dietrich   64 Jun 24 23:44 hello-lisp.asd<br>
> -rw-r--r-- 1 dietrich   48 Jun 24 23:44 hello-lisp.lisp<br>> -rw-r--r-- 1 dietrich 1259 Jun 24 23:44 Makefile<br>> -rw-r--r-- 1 dietrich  342 Jun 24 23:44 README<br>> -rw-r--r-- 1 dietrich  528 Jun 24 23:44 vsenv<br>
><br>> $ ./vsenv ecl.exe -norc -load compile.lisp<br>><br>> Setting environment for using Microsoft Visual Studio 2010 x64 tools.<br>> ;;; Loading "E:/Users/dietrich/home/cs/lang/lisp/ecl/diary/2013/06/24/windows/dynamic-link-libraries/bastel100/v100/shared-lib/embed-windows/compile.lisp"<br>
> ;;; Loading #P"C:/Users/dietrich/home/cs/lang/lisp/ecl/64/git/install/cmp.fas"<br>> ;;; Loading #P"C:/Users/dietrich/home/cs/lang/lisp/ecl/64/git/install/asdf.fas"<br>><br>> $ ls -la<br>><br>
> total 28<br>> drwxr-xr-x 1 dietrich    0 Jan  1  1970 .<br>> drwxr-xr-x 1 dietrich    0 Jan  1  1970 ..<br>> -rw-r--r-- 1 dietrich  636 Jun 24 23:44 compile.lisp<br>> -rw-r--r-- 1 dietrich  453 Jun 24 23:44 hello.c<br>
> -rw-r--r-- 1 dietrich   64 Jun 24 23:44 hello-lisp.asd<br>> -rw-r--r-- 1 dietrich   48 Jun 24 23:44 hello-lisp.lisp<br>> -rw-r--r-- 1 dietrich 1259 Jun 24 23:44 Makefile<br>> -rw-r--r-- 1 dietrich  342 Jun 24 23:44 README<br>
> -rw-r--r-- 1 dietrich  528 Jun 24 23:44 vsenv<br>><br>> So now I wonder what I have to do in order to build a shared library...<br>><br>> One approach would be to change the Makefile and / or the compile.lisp file, but I am not sure how;<br>
><br>> another one might be to compile the lisp files to .h, .c, .data files first and build a shared library "by hand" using 'cl' and 'link'.<br>><br>> Which approach would be the better one?  <br>
><br>> Or is there some better way to solve this problem?<br>><br>> Thanks again,<br>><br>> Dietrich<br>><br>><br>><br>><br>><br>><br>><br>><br>><br>> On Mon, Jun 24, 2013 at 9:50 PM, Juan Jose Garcia-Ripoll <<a href="mailto:juanjose.garciaripoll@gmail.com">juanjose.garciaripoll@gmail.com</a>> wrote:<br>
>><br>>><br>>> On Mon, Jun 24, 2013 at 2:34 PM, Dietrich Bollmann <<a href="mailto:dietrich@formgames.org">dietrich@formgames.org</a>> wrote:<br>>>><br>>>> Using :shared-library at the place of :static-library in the asdf:make-build command seems not to be enough - at least not under Windows.<br>
>><br>>><br>>> What does it mean "not enough". Please, be more accurate on your reports.<br>>><br>>><br>>><br>>> --<br>>> Instituto de Física Fundamental, CSIC<br>
>> c/ Serrano, 113b, Madrid 28006 (Spain) <br>>> <a href="http://juanjose.garciaripoll.googlepages.com">http://juanjose.garciaripoll.googlepages.com</a><br>><br>><br></div></div>