2013-10-20 148 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