Re: [m-users.] Error with static linking for the rmath library

Peter Wang <[email protected]>
Newsgroups gmane.comp.lang.mercury.general
Message-ID <[email protected]>
On Sat, 11 Feb 2023 11:30:30 +0000 Mark Clements <[email protected]> wrote:
> For the rmath library in Mercury (https://github.com/mclements/mercury-rmath), I am trying to use C code for the Mersenne Twister random number generator to replace the default random number generator. This involves replacing two C functions: double unif_rand(void) and void set_seed(unsigned int, unsigned int); for details, see https://rstudio.github.io/r-manuals/r-admin/The-standalone-Rmath-library.html.
> 
> I have got this working -- _except_ if any of four functions (dwilcox, pwilcox, qwilcox, rwilcox) are included in the interface section (see the gist at https://gist.github.com/mclements/68aa486f6ef4cfc9634076dad357e483). I then get a linking error (make minimal_fails):
> 
> /usr/bin/ld: /usr/lib/libRmath.a(std_unif.o): in function `set_seed':
> (.text+0x0): multiple definition of `set_seed'; Mercury/os/minimal_fails.o:minimal_fails.c:(.text+0xb0): first defined here
> /usr/bin/ld: /usr/lib/libRmath.a(std_unif.o): in function `unif_rand':
> (.text+0x40): multiple definition of `unif_rand'; Mercury/os/minimal_fails.o:minimal_fails.c:(.text+0xc0): first defined here
> 
> If I move those functions to the implementation section, then the linking is okay (make minimal_ok).
> 
> Can anyone suggest why this fails and then works?

Your minimal_ok.m doesn't use dwilcox anywhere, so the code for it is
completely missing from the minimal_ok.c file. The linker probably has
no need to pull in librmath at all (or a specific .o file in the archive),
thus avoiding the multiple definition error.

Why are you defining set_seed and unif_rand anyway? Multiple definitions
of the same symbol name are not normally allowed.

Peter
_______________________________________________
users mailing list
[email protected]
https://lists.mercurylang.org/listinfo/users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.