【问题标题】:Makefile error in linking static libraries链接静态库时的 Makefile 错误
【发布时间】:2013-10-20 13:58:49
【问题描述】:

我正在尝试将我自己的静态库链接到我的主程序中。我的包含头文件和库位于同一路径中。 g++ 能够很好地链接主标题,但它无法找到我的库(ipc.a)。请让我知道我做错了什么。

我在运行 make 时遇到的错误是:

# 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 如下所示

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 $@

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

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

【问题讨论】:

  • 当你运行这个 makefile 时你没有得到它。这个makefile会在最后一个命令行的end产生-o esim,你引用的输出在开头就有。确保我们所有的作品都以制表符开头。
  • @WhozCraig,试过还是一样的错误,由于某种原因,lib文件没有被检测到。
  • 你错过了@WhozCraig 提出的观点;您向我们展示的 makefile 和您向我们展示的错误消息不匹配。如果你不向我们展示你真正在做什么,我们很难帮助你。

标签: c++ makefile


【解决方案1】:

问题是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) 

【讨论】:

  • 如上改了,还是一样的错误:make g++ esim.o -I /home/vint/HobbyProjects/esim/src/LIB/PLAT -lipc -o esim /usr/bin/ld: cannot find -lipc collect2: ld returned 1 exit status
  • 因为它仍然没有添加-L/home/vint/HobbyProjects/esim/src/LIB/PLAT 选项。 $(LIBS) 应该添加它。
  • 也试过了,还是不行:(make g++ esim.o -I /home/vint/HobbyProjects/esim/src/LIB/PLAT -L /home/vint/HobbyProjects/esim/src/LIB/PLAT -lipc -o esim /usr/bin/ld: cannot find -lipc collect2: ld returned 1 exit status make: *** [esim] Error 1
  • @vinit $(INCLUDES) 路径甚至不应该出现在链接行上。并且 / 前斜杠也不需要作为 $(LIBS) 宏上的尾部字符。运行带有详细输出的 makefile,然后将输出命令手动粘贴到您自己的终端中进行测试。如果它们不在那里运行,它们当然也不会在 makefile 中运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
相关资源
最近更新 更多