编译/链接GSL

时间:2013-01-10 01:23:47

标签: compiler-construction linker

我有一个使用gsl的程序的以下Makefile:

CXX = g++
ARCH = -mtune=generic
COFLAGS = $(ARCH) -O3 -pipe -I./gsl
CXXFLAGS = -Wall $(COFLAGS)

PROGRAMS = myProgram
GSLFLAGS= -L./gsl/.libs -lgsl -L./gsl/cblas/.libs -lgslcblas -lm

all: $(PROGRAMS)
myProgram:  myProgram.cpp common.o 
    $(CXX) $(CXXFLAGS) $(GSLFLAGS) myProgram.cpp common.o -o myProgram
common.o: common.cpp common.h

common.o: common.h common.cpp 
    $(CXX) $(CXXFLAGS) $(BOOSTFLAGS) $(GSLFLAGS) -c common.cpp

我在编译/链接期间得到以下输出:

g++: -lgsl: linker input file unused because linking not done

知道什么是错的吗?

P.S。 - 我知道-c标志涉及到它,但删除它会导致其他问题。

1 个答案:

答案 0 :(得分:2)

  

我在编译/链接期间得到以下输出

不,你没有。您在编译期间收到此警告,它会告诉您完全问题是什么:您在命令行上传递-lgsl-c,当你进行链接时(-lgsl要求-c要这样做),我会忽略g++

现在,您的Makefile在任何地方都没有单独的-c,因此您可能没有剪切/粘贴整个Makefile,并且完全省略了相关的。

更新:这是您不希望$(GSLFLAGS)的行:

    $(CXX) $(CXXFLAGS) $(BOOSTFLAGS) $(GSLFLAGS) -c common.cpp

最后,这个链接线:

$(CXX) $(CXXFLAGS) $(GSLFLAGS) myProgram.cpp common.o -o myProgram

错误:命令行matters上的源/对象和库的顺序。正确的链接线应该是:

$(CXX) $(CXXFLAGS) myProgram.cpp common.o -o myProgram $(GSLFLAGS)