编译/链接GSL

问题描述 投票:0回答:1

我有一个使用 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

知道出了什么问题吗?

附注- 我知道其中涉及 -c 标志,但删除它会导致其他问题。

linker g++ gsl
1个回答
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

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

$(CXX) $(CXXFLAGS) myProgram.cpp common.o -o myProgram $(GSLFLAGS)
© www.soinside.com 2019 - 2024. All rights reserved.