Subscribe for automatic updates: RSS icon RSS

Login icon Sign in for full access | Help icon Help
Advanced search

Pages: [1]
  Reply  |  Print  
Author Topic: link a program with 42x  (Read 6808 times)
Daniele A.
Posts: 28


« on: November 14, 2011, 09:45:26 am »

hi,

 when i try to compile a 42r (fglrun -l -o ...)
 with library 42x and 42m the entire module 42x is escluded
 but if i remove a specific module 42m (and only with that)
 from the link command then the library is correcty "included"
 in the 42r.

 the functions in the 42m file and in then modules inside the 42x
 are different ....
 the 42m contains the "main"

 Red Hat Enterprise Linux ES release 4 (Nahant Update 4) 64 bit
 fglrun 2.21.10 build-1539.38
 Built Oct 25 2010 19:06:18

 
 
any suggestion ?
thanks
Daniele Artini
Reuben B.
Four Js
Posts: 1049


« Reply #1 on: November 18, 2011, 12:35:30 am »

I hate to say it, but it sounds like a support issue.

The linker will optimise and not include in the .42r,  any module that is not referenced.  (you'll come across that if you use the INITIALIZER attribute and don't have a reference to that function anywhere else in your code).

First thing is to check your function names for uniqueness which it sounds like you have done.  (This is where the PRIVATE FUNCTION that was introduced in 2.21 comes in handy)

I'd also check that the module that is the "specific module that you remove from the link command" is not also defined as being part of the .42x. (ie is included in both the fgllink that produces the .42x and the .42r)

Also you may get a clue by attempting to debug your program.  The debugger will relink the program without optimisation and may uncover something.

Hope that helps,


Reuben

Product Consultant (Asia Pacific)
Developer Relations Manager (Worldwide)
Author of https://4js.com/ask-reuben
Contributor to https://github.com/FourjsGenero
Daniele A.
Posts: 28


« Reply #2 on: November 18, 2011, 08:43:01 am »

i have already done all your suggestion, than i will contact my support
thanks
Rene S.
Four Js
Posts: 111


« Reply #3 on: November 18, 2011, 09:37:43 am »

Hello,
the linker (fglrun -l) works in two modes.
1) linking a library. None of the modules contains MAIN. A target name (-o name) must be specified on the command line.
2) linking a program. One of the modules contains MAIN. The target name is optional. The linker uses the same name as the module containing MAIN and uses the file extension 42x.

When linking a library: none of the modules will be excluded. Symbols might be unresolved.
When linking a program: only used modules will be referenced. All Symbols must be resolved.

Please notice: the target file (the program or the library) is only a dictionary. This dictionary contains the symbols (function names) and the name of the module where the function has been defined.

Rene
Pages: [1]
  Reply  |  Print  
 
Jump to:  

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines