gcc ld: символ (ы) не найден для архитектуры i386 - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь проверить установку gsl в моем Macbook.Я следовал инструкциям этого (1) и этого (2) веб-сайта для установки gsl.

Когда я пытаюсь установить gsl с помощью brew install gsl, я получаю сообщение:

Warning: gsl 2.5 is already installed and up-to-date

Но приведенное выше сообщение не является большой причиной для беспокойства.Чтобы проверить, правильно ли установлена ​​gsl, я пытаюсь скомпилировать тестовый код, который приведен ниже (main.c).У меня возникают проблемы, когда я пытаюсь скомпилировать этот код.

#include <stdio.h>
#include <gsl/gsl_sf_bessel.h>

int main( int argc, const char *argv[] ) {
    double x = 5.0 ;
    double y = gsl_sf_bessel_J0( x ) ;
    printf("J0(%g) = % .18e\n", x, y ) ;
    return 0 ;
}

Я пытаюсь скомпилировать приведенный выше код, используя gcc -Wall -I/usr/local/inlcude main.c.Ниже приводится сообщение об ошибке, которое я получаю.

Undefined symbols for architecture x86_64:
  "_gsl_sf_bessel_J0", referenced from:
      _main in ccHCdcTr.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

Я прочитал ответы, приведенные в этом сообщении stackoverflow (поскольку оно также относится к вышеупомянутой ошибке ld: symbol(s) not found for architecture x86_64).И я попытался скомпилировать код, используя gcc -m32 -Wall -I/usr/local/inlcude main.c.Но теперь я получаю больше ошибок:

 /var/folders/mp/z7xpkw3538z71904cdqhztv00000gn/T//ccrjsmhl.s: 
   46:11: warning: section "__textcoal_nt" is deprecated
        .section __TEXT,__textcoal_nt,coalesced,pure_instructions
                 ^      ~~~~~~~~~~~~~
/var/folders/mp/z7xpkw3538z71904cdqhztv00000gn/T//ccrjsmhl.s:46:11: note: change section name to "__text"
        .section 
    __TEXT,__textcoal_nt,coalesced,pure_instructions
                 ^      ~~~~~~~~~~~~~
ld: warning: The i386 architecture is deprecated for macOS (remove from the Xcode build setting: ARCHS)
Undefined symbols for architecture i386:
  "_gsl_sf_bessel_J0", referenced from:
      _main in ccAmYmtF.o
ld: symbol(s) not found for architecture i386
collect2: error: ld returned 1 exit status

В обоих случаях я не вижу ни одного объектного файла (*.o) в моем рабочем каталоге после компиляции.Как я могу заставить вышеупомянутый код работать должным образом?Как я могу проверить, правильно ли установлен мой gsl?Я работаю с MacOS Mojave версии 10.14.3.

1 Ответ

0 голосов
/ 15 февраля 2019

Я попробовал следующие шаги, и это сработало.=)

Я скомпилировал файл, используя следующее:

gcc -Wall -I/usr/local/include -c main.c -o main.o

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

gcc -L/usr/local/lib main.o -lgsl -o main.out

Теперь, когда я запускаюисполняемый файл main.out из командной строки, используя

./main.out

Я получаю следующий вывод:

J0(5) = -1.775967713143382642e-01
...