【问题标题】:Modify Makefile to add GSL library修改 Makefile 以添加 GSL 库
【发布时间】:2018-05-13 16:53:41
【问题描述】:

我有以下 makefile,并且还想使用 GSL 库。你知道我应该怎么做吗? 我暂时找不到编译代码的正确方法。

INCLDIR := include
OBJDIR  := obj
SRCDIR  := src
BINDIR  := bin

CC      := g++
VPATH   :=
LDFLAGS := -L/home/path/gsl/lib
LIBRARY :=
CFLAGS  := -g -Wall -I $(INCLDIR)

#Source and object files (automatic)
SRCS = $(wildcard $(SRCDIR)/*.cpp)
OBJS = $(subst $(SRCDIR)/,$(OBJDIR)/, $(subst .cpp,.o, $(SRCS)))

# Define here your main source files separated by spaces (without suffix!)
EXEC = main

#Phony = do not represent a file
#.PHONY: all
all : makedir $(EXEC)

# For multiple binaries
$(EXEC) : %: %.cpp $(OBJS)
    $(CC) $(CFLAGS) -o $(BINDIR)/$@ $^

$(OBJDIR)/%.o : $(SRCDIR)/%.cpp
    $(CC) $(CFLAGS) -c -o $@ $<

#Clean: delete every binaries and object files
.PHONY: clean
clean :
    rm -rf $(OBJDIR)/*
    rm -rf $(BINDIR)/*
#Building folders (-p : no error if folder do not exist)
.PHONY: makedir
makedir :
    mkdir -p $(BINDIR)
    mkdir -p $(OBJDIR)

【问题讨论】:

    标签: c++ c++11 makefile gsl


    【解决方案1】:

    您的LDFLAGS 丢失了-lgsl。到目前为止,您只告诉了链接器,除了默认目录之外还应该在哪里进行搜索。

    【讨论】:

    • 如果这是一个共享库,那么下一个问题很可能是“它可以链接,但不会运行”。
    • 好吧,首先指定LD_LIBRARY_PATH来运行你的程序
    • 天哪。你是认真的吗。好的,然后将 libgsl.so 复制到系统搜索路径中,例如 /usr/local/lib。我只是想帮你开始。
    • 我想说的是,对于共享库,当您使用-L... 时,您还需要-Wl,-rpath=...
    • 感谢两位的帮助。我在 LIBRARY 行添加了 -lgsl -lgslcblas -lm,但它仍然无法工作,因为该库保存在 /usr/local/Cellar/gsl/2.4/lib 下。你知道我应该如何修改makefile来指定这个吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多