Library dependencies missing: stdlibs in directory

Marcus Hähnel mhaehnel at os.inf.tu-dresden.de
Thu Feb 20 07:53:57 CET 2014


Hi Emanuel,

it looks like you have some very basic misunderstandings of the build 
system. Looking at what the script you used seems to have done I 
recommend starting from scratch, because I suspect you abused the build 
directory to a point where it is no longer worth saving.

You main misunderstanding seems to be the use of the O= / OBJDIR= 
setting. This points to the root of your builddirectory. This means the 
build directory for the whole l4re tree. Not a new one for each package. 
As previous commenters on this thread wrote: when you use a runtime 
environment for another system the build system has to know about all 
the packages you want to use and how to find them.

So please: start from scratch (you can still use your packages you 
wrote of course).

Here are the basic steps you get you started with the runtime (which 
you could also have found at http://os.inf.tu-dresden.de/L4Re). I assume 
you already have a working / built Fiasco.OC kernel.

A) Download L4Re as instructed here: 
http://os.inf.tu-dresden.de/L4Re/download.html (I used the snapshot)
B) Follow the steps at http://os.inf.tu-dresden.de/L4Re/build.html
   1) Extract the source files
   2) Go to the extracted source (l4re-snapshot-2013123021/src/l4)
   3) Execute 'make B=path/to/builddir' with a build dir that is NOT 
inside the source directory!
   4) Execute 'make O=path/to/builddir config' to configure your l4re 
system.
   5) Type 'make O=path/to/builddir' (! in the directory 
'l4re-snapshot-2013123021/src/l4'! You never change directories in these 
steps!!!)
      Let this last step run to completion!! You do not have a working 
L4RE tree if it does not complete successfully.
Now you have a complete and working l4re source tree. You NEVER have to 
touch anything in the build directory.

If you do not want to type the O= part of the make command everytime 
just put that line into 'src/l4/Makeconf.local'. Then it will be added 
automatically.

C) You can now proceed to test your L4Re setup. Provide the file 
src/l4/conf/Makeconf.boot with the correct paths to the fiasco build 
directory (MODULE_SEARCH_PATH and command (QEMU_PATH) respective options 
(QEMU_OPTIONS). Look at  the example file in the same directory for 
verbose information on the config. Start a qemu with fiasco and an 
example application by typing 'make qemu' at the src/l4 directory (if 
you did not follow above advise about Makeconf.local include 
O=path/to/builddir but pointing it to the ROOT of the build dir! No 
fancy directory guessing please!) and selecting the application.

Once this works you can write your own application:

D) 1) Go into src/l4/pkg and make a new directory by doing 'mkdir 
myhello' then change into the new directory.
    2) issue the command '../../mk/tmpl/inst' to instantiate a template 
application. Edit the Control files with the correct
       dependencies (or remove the templates if you do not think you 
need any) and then edit server/src/main.cc at your leisure.
       I just used:
              #include <stdio.h>
              int main(int argc, char **argv)
              {
                 printf("My Hello!");
                 return 0;
              }

    3) To build the new application just issue 'make' (if you did not 
follow above advise about Makeconf.local include O=path/to/builddir but 
pointing it to the ROOT of the build dir! No fancy directory guessing 
please!) .

    4) To have a new configuration in the dialog window of the qemu boot 
to choose from edit src/l4/conf/mdoules.list and add a new entry. I 
used:
    entry myhello
    roottask moe --init=rom/myhello
    module l4re
    module myhello

    5) Now, in src/l4, type 'make qemu' again (if you did not follow 
above advise about Makeconf.local include O=path/to/builddir but 
pointing it to the ROOT of the build dir! No fancy directory guessing 
please!) and you should see your new myhello entry and be able to boot 
it.

I hope this gets you started...

Kind regards,

- Marcus




On 2014-02-19 17:48, Emanuel Berg wrote:
> Björn Döbel <doebel at os.inf.tu-dresden.de> writes:
> 
>> Why not start with a simple L4 application with a
>> rather simple Makefile (e.g., l4/pkg/hello) and copy
>> stuff from there? Basically the answer is that you
>> only have to set the SRC_C/SRC_CC and REQUIRES_LIBS
>> make variables and the build system will do the rest
>> for you.
> 
> If you read the first couple of messages in this very
> thread, you'll see that I have done just that.
> 
> I put some helpers in this file [1] - after setting up
> the src tree, and the obj dir, I had to 'oldconfig',
> then '-j4', and finally 'make'. That it was that
> complicated for just a toy program tells me there is no
> way around it, if I ever am to write a serious
> application, I need to understand the process.
> 
> Now, I have a C++ project, consisting of two files,
> that also has a ned Lua file.
> 
> It has the following includes:
> 
> #include <l4/re/env>
> #include <l4/cxx/ipc_stream>
> #include <l4/re/util/object_registry>
> #include <iostream>
> 
> I have been unable to compile it because I don't know
> what needs to be done. In the code provided, there are
> typically exports, and a module list (the flags in
> 'qhello' of my file, perhaps), use of ned, inclusion of
> the mk file I mentioned earlier, and more, so again, it
> is a bit to much to digest without knowing what it all
> does. A "hit list" (1, 2, 3, done) would be helpful.
> 
>> On the complex lab there are 4 slide sets - the first
>> two might include some useful information about what
>> needs to go into an L4Re Makefile, if that is what
>> you're specifically searching for.
> 
> Yes, but any reading is fine. Right now I don't know
> how to compile. But I'll read anything you suggest.
> 
> [1] http://user.it.uu.se/~embe8573/conf/.zsh/l4.rc



More information about the l4-hackers mailing list