1

我有一个我正在使用的代码库的生成文件,现在我已经向该代码添加了一些使用 gsl 的代码。我不太确定如何以及将什么添加到将调用 gsl 的 makefile(我要保留它,因为它也在调用 boost)。

这是我的生成文件:

CXX = g++
ARCH = -mtune=generic
#   ARCH = -march=core2
#   ARCH = -march=native


COFLAGS = $(ARCH) -O3 -pipe
CXXFLAGS = -Wall $(COFLAGS)

PROGRAMS = getData analyzeData
BOOSTFLAGS = -I .
OPENMP = -fopenmp -DSUPPORT_OPENMP

all: $(PROGRAMS)
getData: getData.cpp common.o parse.o common.h
    $(CXX) $(CXXFLAGS) getData.cpp common.o parse.o -o getData
analyzeData:  analyzeData.cpp common.o parse.o parameters.o 
    $(CXX) $(CXXFLAGS) $(BOOSTFLAGS) $(OPENMP) estimateCrossReplicatesExpression.cpp common.o parse.o parameters.o -o analyzeData

parameters.o: parameters.cpp parameters.h
parse.o: parse.cpp parse.h
common.o: common.cpp common.h

clean:
    rm *.o $(PROGRAMS)
4

1 回答 1

1

如果 GSL 安装在系统的默认路径 (/usr/local/include/gsl) 上,源文件“example.c”的编译命令将是

gcc -Wall -I/usr/local/include -c example.c

该库作为单个文件 libgsl.a 安装。库 libgsl.so 的共享版本也安装在支持共享库的系统上。这些文件的默认位置是 /usr/local/lib。如果此目录不在链接器的标准搜索路径上,您还需要提供其位置作为命令行标志。

要链接到库,您需要指定主库和支持的 cblas 库,它提供标准的基本线性代数子例程。如果您的系统没有提供合适的 cblas 实现,则库 libgslcblas.a 中提供了一个。以下示例显示了如何将应用程序与库链接,

$ gcc -L/usr/local/lib 例子.o -lgsl -lgslcblas -lm

选项 -lm 与系统数学库链接。在某些系统上,它不是必需的。

因此,您需要在编译命令中指定 gsl 特定标志。相应地更新 Makefile。

于 2013-01-13T05:07:58.240 回答