簡體   English   中英

未定義引用 - 為什么鏈接時找不到 header 文件中的某些方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM