gm2
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gm2] Compiling files in different folders.


From: Gaius Mulley
Subject: Re: [Gm2] Compiling files in different folders.
Date: Thu, 12 Apr 2012 16:03:42 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)

giorgio xyzb <address@hidden> writes:

> Hi,
>
> I am trying to compile a small Modula-2 project, using gm2.
> I am on Ubuntu 10.04, and my version of the compiler is 'GNU Modula-2  1.0.3  
> (20111001)'.
>
> My source files are in different folders:
>
> bin
> src/common
> src/mergesort
> src/quicksort
>
> All source files are in common, mergesort, quicksort, bin is the target 
> directory.
> The main module is contained in
>
> src/common
>
> My Makefile is in the root directory, and looks like this:
>
> INC=-I../common -I../mergesort -I../quicksort
> M2C=gm2 -flibs=iso,pim,logitech -fpim4
>
> build:
>   @cd src ; \
>   cd common ; \
>   ${M2C} -c ${INC} <filename>.mod ; \    # One line for each .mod file
>   cd ../mergesort ; \
>   ${M2C} -c ${INC} <filename>.mod ; \    # One line for each .mod file
>   cd ../quicksort ; \
>   ${M2C} -c ${INC} <filename>.mod ; \    # One line for each .mod file
>   cd ../common ; \
>   ${M2C} -o ../../bin/myapp *.o ../mergesort/*.o ../quicksort/*.o

Hi,

the link looks incorrect.  You need to ask gm2 to use the main module to
resolve the module dependencies and build the link command.  So

${M2C} -o ../../bin/myapp -fonlylink \
       -fobject-path=.:../mergesort:../quicksort \
       ${INC} mainmodule.mod

should do the trick.

hope this helps,
Gaius


>
>
> Everything runs fine (all the .mod files are compiled producing a .o file) 
> until
> the last line, where I want to link all the object files into an executable.
> At this step, the linker complains that it cannot find certain symbols 
> (procedure
> names) that are defined in some of the modules. However, by inspecting
> the .o files, I have verified that the missing symbols are indeed contained
> in the object files I passed on the command line.
>
> As an alternative, I have tried using -fmakeall, but this works fine only if 
> I put all source
> files in the same directory. If the source files are not in the same 
> directory,
> -fmakeall does not work. Here is the command line I used:
>
> gm2 -fmakeall -o ../../bin/sort_runner -g -flibs=iso,pim,logitech -I. 
> -I../mergesort -I../quicksort SortRunner.mod
>
> I get several error messages like
>     .../src/common/SortRunner_m2.cpp:181: undefined reference to 
> `_M2_StringArray_finish'
> /tmp/ccGH2cB3.a(SortManager.o): In function `_M2_SortManager_init':
>
> or
>
>     ...src/common/SortManager.mod:88: undefined reference to 
> `QuickSortList_QuickSortListAlgorithm'
>
> Note that module SortManager is in folder src/common, and has an undefined 
> reference to module QuickSortList,
> which is in folder src/mergesort.
> On the other hand, Module SortRunner is also in src/common, and has an 
> undefined reference to module
> StringArray, which is in the same directory src/common.
>
> At the moment I do not know how to continue. I wanted to ask if I am doing 
> something wrong (using the
> wrong compiler options) or if this could be a compiler bug (as far as I 
> understand from the documentation,
> -fmakeall should find and compile all the module using the paths specified 
> with -I).
>
> Thank you in advance for any useful hints.
> Giorgio
>
>                                         
> _______________________________________________
> gm2 mailing list
> address@hidden
> https://lists.nongnu.org/mailman/listinfo/gm2



reply via email to

[Prev in Thread] Current Thread [Next in Thread]