2017-02-16 2 views
1

Когда мне нужно использовать, например, функцию gnu gsl_sf_bessel_J0 в программе, я просто скомпилирую ее с помощью gcc -lgsl -o gsl_test.c gsl_test. Почему я должен включить -lgsl для его работы? Есть ли способ установить его по умолчанию, поэтому мне не нужно вводить его каждый раз?Ссылка по умолчанию GCC -l

ответ

2

Если вы скомпилируете флаг -v, вы увидите команду, которую вызовет интерфейс GCC, чтобы связать ваш окончательный исполняемый файл *. Если ваша программа использует такую ​​функцию, как gsl_sf_bessel_J0, которая не входит в одну из библиотек по умолчанию (возможно, она ограничена libc и, возможно, также libm), вам необходимо явно связать ее.

Если вам не нравится вводить его все время, сделайте простой Makefile. Ваш случай достаточно прост, что вы можете справиться только с переменными окружения, на самом деле:

$ export CC=gcc 
$ export LDLIBS=-lgsl 
$ make gsl_test 
gcc  gsl_test.c -lgsl -o gsl_test 
$ 

make По умолчанию встроенные правила будут делать все остальное.

*: для справки, мой компилятор связывает ваш пример, как:

"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" 
    -demangle 
    -dynamic 
    -arch x86_64 
    -macosx_version_min 10.12.0 
    -o gsl_test 
    /var/folders/cp/wvm69p1n7_bbjpxxqmttwn700000gn/T/gsl_test-0afe3a.o 
    -lgsl 
    -lSystem  
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.0.0/lib/darwin/libclang_rt.osx.a