C++ 中的“未定义引用”错误,尽管函数定义存在于包含路径的头文件中

'Undefined reference to' error in C++ although function definition exists in header file in include path

提问人:SulfoCyaNate 提问时间:1/6/2018 最后编辑:BarmarSulfoCyaNate 更新时间:1/6/2018 访问量:2398

问:

如果这是一个幼稚的问题,请耐心等待。我试图看看这是否在 SO 的其他地方得到了答案,但我没有找到一个可以回答这个问题的问题。

当我尝试编译某些 C++ 代码 (test.cpp) 时,我看到一个错误。我包括一些标题,如下所示 -

#include <iostream>
#include <string>
#include "lefrReader.hpp"

lefrReader.hpp 具有函数 lefrInit() 的定义,并且存在于文件夹 /foo/bar/include 中。

我正在使用以下内容编译此代码(在 UNIX 环境中)-

g++ -I/foo/bar/include -L/foo/bar/include ./test.cpp -o ./test

但是,这失败并出现此错误 -

test.cpp:(.text+0x11): undefined reference to `lefrInit()'
collect2: ld returned 1 exit status

在包含 (-I) 路径中放置 /foo/bar/include 目录不应该有助于查找 lefrReader.hpp 吗?

编辑 - 我也尝试了以下方法,但无济于事(来自什么是未定义的引用/未解析的外部符号错误以及如何修复它?) -

g++ -I/foo/bar/include -L/foo/bar/include ./test.cpp -o ./test -llefrReader

错误-

test.cpp:(.text+0x11): undefined reference to `lefrInit()'
collect2: ld returned 1 exit status
C++ 链接 链接器错误 包括路径 未解析外部

评论

0赞 Jay 1/6/2018
我不是抱怨它找不到 .hpp,而是抱怨函数定义。
0赞 Philip Brack 1/6/2018
-I 用于编译。未链接。
1赞 Barmar 1/6/2018
什么是未定义的引用/未解析的外部符号错误以及如何修复它?
1赞 Barmar 1/6/2018
您需要与 链接。lefrReader.o
1赞 Barmar 1/6/2018
此答案:无法链接到相应的库/目标文件或编译实现文件

答:

1赞 Barmar 1/6/2018 #1

-l用于与库链接,因此查找(静态库)或(共享库)。-llefRreaderlefrReader.alefrReader.so

若要与单个对象文件链接,只需将对象文件作为参数即可。

g++ -I/foo/bar/include ./test.cpp /foo/bar/include/lefrReader.o -o ./test

您必须事先编译该文件:

g++ -I/foo/bar/include lefrReader.cpp -c -o lefrReader.o

或者,您可以同时编译和链接它们:

g++ -I/foo/bar/include ./test.cpp /foo/bar/include/lefrReader.cpp -o ./test

但是,这意味着即使只有一个文件发生了变化,您也会重新编译这两个文件。当您开始处理多个文件时,现在是开始使用 的好时机,它可以自动执行所有依赖项。.cppmakefile