[英]Undefined reference - Why are some of the Methods in the header file not found when linking?
應鏈接的項目由 2 個.cpp文件組成。 標題本身中的包含和所有引用似乎都是正確的(我們團隊中沒有人可以找到錯誤)。 因此我認為我們的 Makefile 一定是錯的或遺漏了什么。
每次構建項目時,我都會在其中一個頭文件中包含的某些函數上遇到鏈接錯誤。 不是所有的人。 錯誤看起來像這樣,但在多個功能上:
/usr/bin/ld: Utilities.cpp:(.text+0x2647): undefined reference to `simpleMatMultiplication(std::vector<std::vector<double, std::allocator >, std::allocator<std::向量<double, std::allocator > > >, std::vector<std::vector<double, std::allocator >, std::allocator<std::vector<double, std::allocator > > >) '
這是 Makefile 的樣子:
CXX = g++
CXXFLAGS += -Wall -std=c++14 -pedantic
LDFLAGS =
INCLUDES = include
RM = rm -f
SRC_DIR = src
OBJ_DIR = obj
OUT_DIR = output
SRCS = $(SRC_DIR)/*.cpp
OBJS = $(OBJ_DIR)/*.o
OUTS = $(OUT_DIR)/*.txt
TARGET = waveguide
OBJS_GEN = $(OBJ_DIR)/Utilities.o
OBJS_TEST = $(OBJ_DIR)/waveguide.o $(OBJS_GEN)
.PHONY: all clean
all: $(TARGET)
waveguide: $(OBJS_TEST)
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS) $(LIBS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
$(CXX) $(CXXFLAGS) -I $(INCLUDES) -c -o $@ $<
clean:
$(RM) $(TARGET) $(OBJS) $(OUTS)
Makefile 的前兩個目標工作得很好。 生成 object 文件。 鏈接兩個 object 文件以生成目標時發生錯誤。
上面的Makefile有錯誤嗎? 盡管可能沒有使用一些已聲明的標志,例如LIBS 。 我真正不明白的是,如何找到一些方法(同一個頭文件),而另一些方法被標記為未定義的引用。
使用 make -n 提供
g++ -Wall -std=c++14 -pedantic -I include -c -o obj/waveguide.o
src/waveguide.cpp
g++ -Wall -std=c++14 -pedantic -I include -c -o
obj/Utilities.o src/Utilities.cpp
g++ -Wall -std=c++14 -pedantic -o
waveguide obj/waveguide.o obj/Utilities.o
鏈接過程中未定義的引用並不意味着它在 header 文件中找不到聲明,這意味着它無法在任何提供的 object 文件中找到定義/實現。
Utilities.cpp
似乎不包含simpleMatMultiplication
的實現,或者至少不包含這個確切的簽名。 您的 Makefile 似乎沒問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.