当我需要在程序中使用gnu函数gsl_sf_bessel_J0时,我只需使用gcc -lgsl -o gsl_test.c gsl_test编译它。为什么我必须包含-lgsl才能工作?有什么方法可以将它设置为默认值,所以我不必每次都输入它吗?
答案 0 :(得分: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