Jerry James wrote:
Since they contain identical
symbols, the bundled polylmake version renames all of the symbols in the GMP-enabled version to have "_gmp" suffixes. We did likewise, but to support applications that only want the GMP-enabled version and expect the original unaltered symbol names, we made declarations of the form "foo __attribute__((alias(foo_gmp)))" for each external symbol foo.
[snip]
And this in the .dynsym section:
109: 0000000000246100 0 OBJECT GLOBAL DEFAULT 23 dd_purezero 634: 0000000000246100 32 OBJECT GLOBAL DEFAULT 23 dd_purezero_gmp
So dd_purezero is not, in fact, an undefined symbol. It is an alias to dd_purezero_gmp, which is defined and has the proper relocation type.
Don't use __attribute__((alias(foo_gmp))), use asm("foo_gmp"), as per: https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/Asm-Labels.html
Kevin Kofler