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