C-无法在Mac上使用GSL编译



我试图在我的MacBook Pro上的Montecarlo模拟上实现GSL_RNG.H(2012年中13英寸)。模拟全部写在C中。我的问题是GCC-6抱怨,尽管我认为汇编标志很好,但仍找不到GSL库。

dectare.h的顶部,我正在处理的所有.c文件中包含:

/* __________________ LIBRARIES ___________________*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <gsl/gsl_rng.h>

错误:

fatal error: gsl/gsl_rng.h: No such file or directory

我的makefile中包含的汇编标志:

INCLUDE = -I/usr/local/Cellar/gsl/2.4/include
LINK = -L/usr/local/Cellar/gsl/2.4/lib -lgsl -lgslcblas

我通过Homebrew安装了GCC-6和GSL。

如何使GCC-6找到GSL?我的旗帜错了吗?

makefile:

CC = g++-6
CFLAGS = -lm -O3 -ansi -pedantic -Wall -Wextra
        -Wconversion -Wredundant-decls -fmax-errors=7
        -Wunsafe-loop-optimizations -Wmissing-braces
        -Wparentheses
        # -Wdouble-promotion
INCLUDE = -I/usr/local/Cellar/gsl/2.4/include
LINK = -L/usr/local/Cellar/gsl/2.4/lib -lgsl -lgslcblas
../bin/bidimensional_MC: random.o functions.o subroutines.o
             main.o 
$(CC) -o ../bin/bidimensional_MC random.o functions.o
      subroutines.o main.o  $(CFLAGS) $(LINK) $(INLCUDE)
random.o: random.c
    $(CC) -c random.c -lm -O3  $(CFLAGS) $(INCLUDE)
functions.o: functions.c
    $(CC) -c functions.c  $(CFLAGS) $(INCLUDE)
main.o: main.c
    $(CC) -c main.c  $(CFLAGS) $(INCLUDE)
suboutines.o: subroutines.c
    $(CC) -c subroutines.c  $(CFLAGS) $(INCLUDE)
clean:
    rm *.o

ls /usr/local/Cellar/gsl/2.4/include/gsl/的输出是:

/usr/local/Cellar/gsl/2.4/include/gsl/gsl_rng.h

ls /usr/local/Cellar/gsl/2.4/include/的输出是:

gsl/ 

ls /usr/local/Cellar/gsl/2.4/include/gsl/的输出太长了,但是一切都在那里。

额外信息:我使用的是G -6而不是GCC-6,因为我最终要执行模拟的群集需要代码为C 符合C 。

在makefile中,您有(或更确切地说,一次声称拥有):

random.o: random.c
    $(CC) -c random.c -lm -O3  $(CFLAGS)

编译对象文件时,您不应指定库。您的CFLAG不包括${INCLUDE}(或$(INCLUDE))宏。您需要类似的东西:

random.o: random.c
    $(CC) -c random.c -O3 $(CFLAGS) $(INCLUDE)

这是一个最小的变化;我将$(INCLUDE)添加到CFLAGS(并再次删除-lm - 尽管它没有特定的伤害,但您甚至不需要它)。我还会添加-Werror -Wmissing-prototypes -Wstrict-prototypes,并且使用-ansi(又称-std=c90)不明智 - 这是古标准。您应该使用-std=c11

CFLAGS = -O3 -g -std=c11 -pedantic -Wall -Wextra 
        -Wconversion -Wredundant-decls -fmax-errors=7 
        -Wunsafe-loop-optimizations -Wmissing-braces 
        -Wparentheses $(INCLUDE) 
        -Werror -Wmissing-prototypes -Wstrict-prototypes

另外,我添加了-g以获取调试代码。即使进行优化,始终包括-g。它没有运行时的成本;如果您需要调试代码,它确实会有好处。当然,调试优化的代码并不容易,但是您可以做更多的事情,而不是没有-g。将其包括在"对象的汇编"one_answers"链接"阶段中。

(从详细的角度来看,我会有一堆单独的宏,以便可以独立打开或关闭每个标志,而不是必须重写整个CFLAG。但是,这可以在另一天等待。)

相关内容

  • 没有找到相关文章

最新更新