无数次链接问题。我正在尝试构建一些调用GNU科学库的简单C代码。但是,GSL文件夹不嵌套在我的项目文件夹中。因此,代码位于C:/c-examples/
,GSL库为C:/gsl
。
这是C代码
#include <stdio.h>
#include <gsl_math.h>
#include <fit/gsl_fit.h>
int
main (void)
{
int i, n = 4;
double x[4] = { 1970, 1980, 1990, 2000 };
double y[4] = { 12, 11, 14, 13 };
double w[4] = { 0.1, 0.2, 0.3, 0.4 };
double c0, c1, cov00, cov01, cov11, chisq;
gsl_fit_wlinear (x, 1, w, 1, y, 1, n,
&c0, &c1, &cov00, &cov01, &cov11,
&chisq);
printf ("# best fit: Y = %g + %g X\n", c0, c1);
printf ("# covariance matrix:\n");
printf ("# [ %g, %g\n# %g, %g]\n",
cov00, cov01, cov01, cov11);
printf ("# chisq = %g\n", chisq);
for (i = 0; i < n; i++)
printf ("data: %g %g %g\n",
x[i], y[i], 1/sqrt(w[i]));
printf ("\n");
for (i = -30; i < 130; i++)
{
double xf = x[0] + (i/100.0) * (x[n-1] - x[0]);
double yf, yf_err;
gsl_fit_linear_est (xf,
c0, c1,
cov00, cov01, cov11,
&yf, &yf_err);
printf ("fit: %g %g\n", xf, yf);
printf ("hi : %g %g\n", xf, yf + yf_err);
printf ("lo : %g %g\n", xf, yf - yf_err);
}
return
}
这是我为它写的makefile:
CC=gcc
CFLAGS=-Wall -IC:/gsl -lgsl
OLSexample: OLSexample.o
clean:
rm -f OLSexample OLSexample.o
但是,在此出口上运行make
时出现错误2,找不到文件。我想我可能在makefile中做了一些错误的指定依赖项,或者链接库。欢迎任何帮助。
EDIT2:
遵循mux的建议和模板here我将makefile更改为以下内容(包括库的完整路径)。我继续得到上一个错误(e = 2)。
CC=gcc
CFLAGS=-c -Wall -IE:/programming/c/libraries/gsl-1.15.tar/gsl-1.15/
LDFLAGS= -LE:/programming/c/libraries/gsl-1.15.tar/gsl-1.15/
LIBS= -lgsl
SOURCES=OLSexample.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=OLSexample
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@
.c.o:
$(CC) $(CFLAGS) $< -o $@
此处包含完整的错误消息以供参考:
e:\programming\c\WorkingFolder\gslExamples\1-ols>make
make
gcc -c -Wall -IE:/programming/c/libraries/gsl-1.15.tar/gsl-1.15/ -c -o OLSexample.o OLSexample.c
process_begin: CreateProcess((null), gcc -c -Wall -IE:/programming/c/libraries/gsl-1.15.tar/gsl-1.15/ -c -o OLSexample.o OLSexample.c, ...) failed.
make (e=2): The system cannot find the file specified.
make: *** [OLSexample.o] Error 2
答案 0 :(得分:4)
您应该将-LC:/gsl
添加到搜索目录列表中,-I
添加要搜索标题的include目录,-L
添加要搜索库-l<lib>
的目录。 1}}。但是,我没有看到你实际编译任何东西,也许你应该从Makefile模板开始:
CC=gcc
CFLAGS=-c -Wall -Ic:/gsl
LDFLAGS= -Lc:/gsl
LIBS= -lgsl
SOURCES=main.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=hello
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@
.c.o:
$(CC) $(CFLAGS) $< -o $@
答案 1 :(得分:2)
您的最新错误表明GNU make在运行命令时遇到问题。在Windows中,它使用CreateProcess函数,该函数失败。这与gsl无关。你的道路上有gcc吗?如果你只输入gcc而不是make,你会得到什么?
答案 2 :(得分:1)
好的,所以我想出了问题所在。事实证明,我已经讨论了on this thread的另一个make
版本。