2017-02-16 71 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