Hi Ryan;

  I have been missing the obvious. I can see the problem now, thanks to you.

  I have a task code directory for each task.  I have a library directory.
I make symlinks from the task code directory to the library.  So the
library, is de-facto, local to the task code directory while the binding to
the gmp library is not.

  So, I see what I need to do.

  Make a temporary subdirectory underneath the task code directory.
  Copy the task code there.
  Copy the library code there.
  Copy the binding there.
  cd to the subdirectory.
  Execute the task code.
  cd back upwards.
  delete the temporary subdirectory.

  Wow, I really am dense sometimes.  Thanks for the help.

Ken Wolcott

On Sat, Sep 27, 2025 at 10:46 PM Ryan Carsten Schmidt <
[email protected]> wrote:

> On Sep 27, 2025, at 14:50, Kenneth Wolcott wrote:
> > confused about MacPorts GIMP libraries when using C as a library binding
> language...
> >
> > So I have several GIMP-oriented ports:
> >
> > port installed | grep -i gmp
> >   gmp @6.3.0_0 (active)
> >   p5.34-alien-gmp @1.160.0_0 (active)
> >   p5.34-crypt-dh-gmp @0.0.120_0 (active)
> >   p5.34-math-bigint-gmp @1.700.300_0 (active)
> >   p5.34-math-bigint-gmpz @0.1.800_0 (active)
> >   p5.34-math-gmp @2.250.0_0 (active)
> >   p5.34-math-gmpf @0.530.0_0 (active)
> >   p5.34-math-gmpq @0.670.0_0 (active)
> >   p5.34-math-gmpz @0.670.0_0 (active)
> >   p5.34-math-prime-util-gmp @0.520.0_0 (active)
> >   R-gmp @0.7-5_0 (active)
> >
> > So is "gmp" the library or the executable or both? Apparently only the
> library.  But is it complete?
>
> Using "port contents gmp" I see it contains two libraries, libgmp (for use
> from C or most other languages) and libgmpxx.dylib (for use from C++), and
> associated support files. No executable. I have no reason to believe it's
> incomplete.
>
> > Apparently I have several gmp C++ bindings (gmp, gmpc, gmpz, gmpq?) but
> only one C gmp binding (gmp).  So I can get a C++ gmpz binding to work
> great but I cannot get a C gmpz created (please show me how).
>
> The ports beginning with p5.34- are for use from Perl 5.34, so I don't
> think learning about how it divides up access to the GMP libraries will
> help you use GMP from C.
>
> Similarly ports beginning with R- are for use from the R language;
> inapplicable here.
>
> > So, this is why the Pluto GMP library binding is failing; there is no
> gmpz library to bind to (??)
> >
> > I see lots of Perl gmp bindings as ports; where is Perl getting its gmpz
> from?
>
> Using "nm /opt/local/lib/libgmp.dylib" you can see the names of the
> symbols in the library. I see symbols beginning with gmpf, gmpn, gmpq,
> gmpz; so these are not separate library files; they're part of the one and
> only libgmp.
>
> > Here's my attempt to build a Pluto GMP binding:
> >
> > #!/bin/bash
> >
> > # clang -c -fpic libpluto-gmp.c -I
> /opt/homebrew/Cellar/gmp/6.3.0/include/
> > # clang -O3 -fpic -shared -o libpluto-gmp.dylib libpluto-gmp.o -lgmp -L
> /opt/homebrew/Cellar/gmp/6.3.0/lib/
>
> If we wanted to try to reproduce this on our systems, where would we get
> this libpluto-gmp.c?
>
> > Here's the results from running the Pluto task code:
> >
> > (cd Pluto/Fermat_Numbers; ./fermat_numbers.pluto)
> > The first 10 fermat numbers are:
> > F₀ = 3
> > F₁ = 5
> > F₂ = 17
> > F₃ = 257
> > F₄ = 65537
> > F₅ = 4294967297
> > F₆ = 18446744073709551617
> > F₇ = 340282366920938463463374607431768211457
> > F₈ =
> 115792089237316195423570985008687907853269984665640564039457584007913129639937
> > F₉ =
> 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084097
> >
> > Factors of the first 9 Fermat numbers:
> > /opt/pluto/v.0.12.0/bin/pluto: ./bignum.pluto:1391: failed to load
> library './libpluto-gmp.dylib'
> > stack traceback:
> > [C]: in function 'pluto:ffi.open'
> > ./bignum.pluto:1391: in field 'init'
> > ./fermat_numbers.pluto:29: in main chunk
> > [C]: in ?
>
> This looks like /opt/pluto/v.0.12.0/bin/pluto is trying to dlopen
> libpluto-gmp.dylib from the current directory and doesn't find it. Is
> libpluto-gmp.dylib in the current directory when you run this command?
>
>
>

Reply via email to