gpt4 book ai didi

c++ - 对 Makefile.win 中函数的 undefined reference

转载 作者:太空宇宙 更新时间:2023-11-04 13:43:34 25 4
gpt4 key购买 nike

我最近在做一个大学项目。一切正常,直到我对代码进行了一些最后的润色。当我尝试编译时,我得到:

main.cpp:(.text+0x1f6): undefined reference to 'readline(std::vector<std::string,std::allocator<std::string> >&, int)'

main.cpp:(.text+0x35d): undefined reference to 'readword(std::vector<std::string, std::allocator<std::string> >&, int)'

我的项目包含 3 个文件:main.cpp、read.h 和 read.cpp。以下是 makefile 中编译器似乎有问题的行:

$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

main.o: main.cpp
$(CPP) -c main.cpp -o main.o $(CXXFLAGS)

read.o: read.cpp
$(CPP) -c read.cpp -o read.o $(CXXFLAGS)

如有任何帮助,我将不胜感激。

最佳答案

大概 read.cpp 包含您的链接器找不到的两个函数的定义。所以你需要这两个对象来构建你的二进制文件:

$(BIN) : read.o main.o
$(CPP) read.o main.o -o $(BIN)

此外,您可以使用一些常用技巧来简化您的 makefile。由于您正在构建所有相同的目标文件,因此您可以制定一条规则:

# rule for all .o files depends their specific .cpp
%.o : %.cpp
# here $< refers to the "%.cpp" dependency, and "$@" is the target
$(CPP) -c $< -o $@ $(CXXFLAGS)

这将写入您的 main.oread.o 规则。然后,我们只需要告诉 make 这就是我们想要的:

SRC = read.cpp main.cpp
OBJ = $(patsubst %.cpp,%.o,$(SRC)) ## OBJ is "read.o main.o"

$(BIN) : $(OBJ) # depends on all the object files
$(CPP) $(OBJ) -o $(BIN)

现在,如果您添加 write.cpp,您只需修改 makefile 中的一行而不是几行。然后,您甚至可以避免这样做:

SRC = $(wildcard *.cpp)

关于c++ - 对 Makefile.win 中函数的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26843317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com