1
當我需要在程序中使用gnu函數gsl_sf_bessel_J0時,我只需使用gcc -lgsl -o gsl_test.c gsl_test編譯它即可。爲什麼我必須包含-lgsl才能工作?有什麼辦法可以將它設置爲默認值,所以我不必每次輸入它?GCC默認鏈接-l
當我需要在程序中使用gnu函數gsl_sf_bessel_J0時,我只需使用gcc -lgsl -o gsl_test.c gsl_test編譯它即可。爲什麼我必須包含-lgsl才能工作?有什麼辦法可以將它設置爲默認值,所以我不必每次輸入它?GCC默認鏈接-l
如果使用-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