我有一个使用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标志涉及到它,但删除它会导致其他问题。
答案 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)