提问人:SulfoCyaNate 提问时间:1/6/2018 最后编辑:BarmarSulfoCyaNate 更新时间:1/6/2018 访问量:2398
C++ 中的“未定义引用”错误,尽管函数定义存在于包含路径的头文件中
'Undefined reference to' error in C++ although function definition exists in header file in include path
问:
如果这是一个幼稚的问题,请耐心等待。我试图看看这是否在 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
答:
1赞
Barmar
1/6/2018
#1
-l
用于与库链接,因此查找(静态库)或(共享库)。-llefRreader
lefrReader.a
lefrReader.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
但是,这意味着即使只有一个文件发生了变化,您也会重新编译这两个文件。当您开始处理多个文件时,现在是开始使用 的好时机,它可以自动执行所有依赖项。.cpp
makefile
上一个:未解析的外部阵列
评论
lefrReader.o