неопределенная ссылка на ` чертенок gmpz инициализации, строительные программы ГМП с Cygwin


Я пытаюсь скомпилировать эту простую программу GMP на Cygwin:

#include <gmp.h>

int main(){
    mpz_t i;
    mpz_init(i);
}

Это команда: gcc -lgmp test.c

Я получаю эту ошибку:

/tmp/ccJpGa7K.o:test.c:(.text+0x17): undefined reference to `__imp___gmpz_init'
/tmp/ccJpGa7K.o:test.c:(.text+0x17): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__imp___gmpz_init'
collect2: error: ld returned 1 exit status

Любая идея, что случилось? Я знаю, что он может найти библиотеку (libgmp.файл DLL.А), но он, кажется, не находит функции.

Вывод nm /usr/lib/libgmp.dll.a | grep mpz_init:

0000000000000000 T __gmpz_inits
0000000000000000 I __imp___gmpz_inits
0000000000000000 T __gmpz_init_set_ui
0000000000000000 I __imp___gmpz_init_set_ui
0000000000000000 T __gmpz_init_set_str
0000000000000000 I __imp___gmpz_init_set_str
0000000000000000 T __gmpz_init_set_si
0000000000000000 I __imp___gmpz_init_set_si
0000000000000000 T __gmpz_init_set_d
0000000000000000 I __imp___gmpz_init_set_d
0000000000000000 T __gmpz_init_set
0000000000000000 I __imp___gmpz_init_set
0000000000000000 T __gmpz_init2
0000000000000000 I __imp___gmpz_init2
0000000000000000 T __gmpz_init
0000000000000000 I __imp___gmpz_init

Я попробовал его без grep, и каждый символ там имеет адрес 0 по какой-то причине.

2 2

2 ответа:

Это исправило его: gcc test.c -lgmp. Я просто поставил -lgmp последним. Это, кажется, что-то особенное для Cygwin, я попробовал его с Clang и gcc-4.9 на OS X, и они не заботятся о порядке.

Что касается странного поведения с dll.файл, это потому, что некоторые *.a файлы-это просто заглушки, которые вызывают связывание с фактическим cyg*.dll, которые все находятся в /usr /bin или/usr/local / bin. Тем не менее, я думаю, что это всегда должно быть автоматическим, потому что Cygwin пытается быть POSIX, так что если вы делаете это правильно, то вы не нужно ссылаться на cyg*.DLL-файл.

Узнал отсюда: https://cygwin.com/ml/cygwin/2011-12/msg00305.html

У меня также была та же проблема при использовании gmp.h с кодовыми блоками на Windows 7. Мое решение 1. Установка gmp от deval при установке cygwin 2. Добавить путь путь libgmp.а и libgmp.файл DLL.а в вашем редакторе компоновщик 3. Перестроить все.