Пропуск несовместимого каталога - gcc - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь скомпилировать скрипт, используя некоторые библиотеки, доступные в пакете, используя:

gcc -g -o sac2mt5 sac2mt5.o libsac2mt5.a -L/home/yuki/sac/lib -lsacio -lm

Это ошибка, которую я получаю:

/usr/bin/ld: skipping incompatible /home/yuki/sac/lib/libsacio.a when searching for -lsacio
/usr/bin/ld: cannot find -lsacio
collect2: error: ld returned 1 exit status

В чем здесь проблема?Почему эта библиотека несовместима?Что нужно изменить в флагах, чтобы избежать этого?Я просто хочу знать, если это проблема с библиотекой, с которой я ничего не могу поделать, или я делаю что-то не так.

Любая помощь приветствуется

1 Ответ

0 голосов
/ 07 декабря 2018

Библиотека /home/yuki/sac/lib/libsacio.a была создана для архитектуры, несовместимой с той, для которой вы пытаетесь связать программу.Наиболее вероятная причина - библиотека содержит 32-битные объектные файлы, и вы пытаетесь установить 64-битную связь.Следующим наиболее вероятным является 64-разрядная библиотека в 32-разрядном соединении.

Если вы cd перейдете в каталог, в котором вы запустили это соединение, и запустите:

$ objdump -f sac2mt5.o

, вывод будетсодержат строки вида:

sac2mt5.o:  file format <...>
architecture: <...>, flags 0x<...>:

например (64-битный ELF):

sac2mt5.o:     file format elf64-x86-64
architecture: i386:x86-64, flags 0x00000010:

или (32-битный ELF):

sac2mt5.o:     file format elf32-i386
architecture: i386, flags 0x00000010:

Этискажу вам название архитектуры, для которой вы пытаетесь связать (архитектура вашей системы) и имя ее файла объектного формата.

Если вы затем также выполните:

$ objdump -f /home/yuki/sac/lib/libsacio.a

youувидит соответствующую информацию для каждого объектного файла в архиве /home/yuki/sac/lib/libsacio.a, и вы увидите, что архитектура и формат файла этих объектных файлов не соответствуют вашей системе.

Вам необходимо найти и использовать libsacio.a, который был построен для той же архитектуры, что и ваша система - скорее всего, 64-битная библиотека, если ваша система 64-битная;32-битная библиотека, если ваша система 32-битная.

...