Issue with GMP static linkage (and bundle)
atlantis23
vk at atlantis23.com
Mon Oct 2 13:05:40 UTC 2017
> Am 22.09.2017 um 21:19 schrieb Daniele Ghisi <danieleghisi at gmail.com>:
>
> Dear GMP users,
>
> I need to link GMP statically to a project (written in C).
>
> I can't seem to do it if the Mach-O Type of my target is set to "Bundle".
> No issues when it is set to "executable" or "static library".
> No issues when I use dynamic linkage either (with -lgmp)
>
> I am on OS X 10.10.5, Xcode 7.2
> I have tried to install GMP manually or with homebrew, in both cases I
> still get the issue.
>
> The specific error is
> "ld: illegal text-relocation to '___gmp_binvert_limb_table' in
> /usr/local/lib/libgmp.a(mp_minv_tab.o) from '___gmpn_divexact_1' in
> /usr/local/lib/libgmp.a(dive_1.o) for architecture x86_64
> clang: error: linker command failed with exit code 1 (use -v to see invocation)"
I don't get this error on my Mac (10.11.6, Xcode 7.3.1).
My test project is a System plug-in which links against a static libgmp.a (a homebrew built).
The project builds and works as expected.
I'm not a Mach-O expert, but your error message looks like your linker tries to relocate symbols (when linking the static gmp).
The header of my Mach-O executable looks like
otool -hv ...
Mach header
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL 0x00 BUNDLE 19 2712 NOUNDEFS DYLDLINK TWOLEVEL
The code actually links to libgmp, for example
otool -tV ...
(__TEXT,__text) section
...
00000000000019b5 callq 0x1d50 ## symbol stub for: ___gmpn_divexact_1
However, there is no relocation table,
otool -r
returns empty.
Are you sure you're using the correct gmp.h version for the linked libgmp.a? The error message refers to symbol
___gmpn_divexact_1
which is used in gmp 6.1.2 but was not present in older versions.
--vk
More information about the gmp-discuss
mailing list