2013-10-20 124 views
2

我想我自己的静态库链接到我的主程序。我的包含头文件和库位于相同的路径中。 g ++能够链接主标题,但它无法找到我的库(ipc.a)。请让我知道我做错了什么。当我运行使我得到的Makefile错误链接静态库

错误是:低于

INC_DIR = /home/vint/HobbyProjects/esim/src/LIB/PLAT 
LIB_DIR = /home/vint/HobbyProjects/esim/src/LIB/PLAT 
INCLUDES = -I $(INC_DIR)/ 

LIBS = -L$(LIB_DIR)/ 
LIBA = -lipc 

CC = g++ 
DEBUG = -g 
LFLAGS = -Wall $(DEBUG) 
CFLAGS = -Wall -c 

SOURCES = esim.cpp \ 

HEADERS = esim.h 

OBJ = $(SOURCES:.cpp=.o) 

EXE = esim 

all: esim 

$(EXE): $(OBJ) 
    $(CC) $(OBJ) $(INCLUDES) $(LIBA) -o $(EXE) 

.cpp.o: 
    $(CC) $(CFLAGS) $(INCLUDES) $< -o [email protected] 

tar: 
    tar -czf $(EXE).tar.gz $(SOURCES) $(HEADERS) Makefile 

clean: 
    rm -f $(OBJ) 
    rm -f $(EXE) 
+0

你没有得到,当你运行该生成文件。这个makefile会在最后一个命令行的* end *处产生'-o esim',你引用的输出在开头就有。确保我们所有的作品都以tab-char开头。 – WhozCraig

+0

@WhozCraig,尝试,仍然得到同样的错误,因为某些原因,没有被检测到的lib文件。 – vinit

+0

你错过了@WhozCraig正在制作的点;您向我们显示的makefile以及您向我们显示的错误消息*不匹配*。如果你没有告诉我们你真的在做什么,我们很难帮助你。 – Beta

回答

1

# make 
g++ -o esim esim.o -L /home/vint/HobbyProjects/esim/src/LIB/PLAT -lipc -Wall -g 
/usr/bin/ld: cannot find -lipc 
collect2: ld returned 1 exit status 

Makefile中给出的问题是由生成文件编译时你不添加-L/home/vint/HobbyProjects/esim/src/LIB/PLAT选项。

变化:

$(EXE): $(OBJ) 
    $(CC) $(OBJ) $(INCLUDES) $(LIBA) -o $(EXE) 

分为:

$(EXE): $(OBJ) 
    $(CC) $(OBJ) $(INCLUDES) $(LIBA) $(LIBS) -o $(EXE) 
+0

改变它如上,仍然是相同的错误:'make g ++ esim.o -I/home/vint/HobbyProjects/esim/src/LIB/PLAT -lipc -o esim /usr/bin/ld:无法找到 - LIPC collect2:LD返回1退出status' – vinit

+0

因为它仍然不加'-L /家庭/ VINT/HobbyProjects/ESIM/src目录/ LIB/PLAT'选项。 '$(LIBS)'应该添加它。 – Zifre

+0

试过了也仍然没有运气:('让 G ++ esim.o -I /家庭/ VINT/HobbyProjects/ESIM/src目录/ LIB/PLAT -L /家庭/ VINT/HobbyProjects/ESIM/src目录/ LIB/PLAT - lipc -o esim /usr/bin/ld:找不到-lipc collect2:ld返回1退出状态 make:*** [esim]错误1' – vinit