我有这个简单的 C 程序,但无法正确链接。
这是程序,
#include <gsl/gsl_cdf.h>
#include <stdio.h>
int main()
{
double bottom_tail = gsl_cdf_gaussian_P(-1.96, 1);
printf("Area between [-1.96, 1.96]: %g\n", 1-2*bottom_tail);
}
在 shell 中,我正在做:
gcc gsl_erf.c -o gslTest -I/usr/local/include/gsl -L/usr/local/lib
我确定 gsl_cdf.h
头文件在 /usr/local/include/gsl
中,同样我知道 .so
位于 /usr/local/lib
链接器,gcc 后端?提示我有一个未定义的 gsl_cdf_gaussian_P
我以为我的顺序不对,所以我也试了:
gcc -I/usr/local/include/gsl -L/usr/local/lib gsl_erf.c -o gslTest
但这也很糟糕。我究竟做错了什么? :(
最佳答案
您必须告诉编译器实际链接到您正在使用的库:您需要一个 -l
选项,可能类似于 -lgsl
。 (取.so
文件名,去掉.so
后缀和lib
前缀,就是放在后面的—— l
.)
-L
选项告诉链接器在哪里找到 库,但并不指示它实际链接任何东西 — 就像 -I
选项告诉编译器在哪里可以找到 header ,但实际上并不 #include
任何代码。
关于c - gcc undefined reference 当我知道引用是正确的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20111987/