'Undefined reference to' C++ 中的错误,尽管包含路径中的 header 文件中存在函数定义
'Undefined reference to' error in C++ although function definition exists in header file in include path
如果这是一个幼稚的问题,请多多包涵。我试图查看是否在 SO 的其他地方回答了这个问题,但我没有找到回答这个问题的问题。
我在尝试编译某些 C++ 代码时看到错误 (test.cpp)。我包括一些headers,如下-
#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 吗?
编辑-我也尝试了以下无济于事(来自What is an undefined reference/unresolved external symbol error and how do I fix it?)-
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
-l
用于 link 使用库,因此 -llefRreader
查找 lefrReader.a
(静态库)或 lefrReader.so
(共享库)。
要link使用单个目标文件,您只需将目标文件作为参数。
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
或者您可以同时编译和 link 它们:
g++ -I/foo/bar/include ./test.cpp /foo/bar/include/lefrReader.cpp -o ./test
然而,这意味着您将重新编译这两个 .cpp
文件,即使只有其中一个文件发生了更改。当您开始处理多个文件时,是开始使用 makefile
的好时机,它可以自动执行所有依赖项。
如果这是一个幼稚的问题,请多多包涵。我试图查看是否在 SO 的其他地方回答了这个问题,但我没有找到回答这个问题的问题。
我在尝试编译某些 C++ 代码时看到错误 (test.cpp)。我包括一些headers,如下-
#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 吗?
编辑-我也尝试了以下无济于事(来自What is an undefined reference/unresolved external symbol error and how do I fix it?)-
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
-l
用于 link 使用库,因此 -llefRreader
查找 lefrReader.a
(静态库)或 lefrReader.so
(共享库)。
要link使用单个目标文件,您只需将目标文件作为参数。
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
或者您可以同时编译和 link 它们:
g++ -I/foo/bar/include ./test.cpp /foo/bar/include/lefrReader.cpp -o ./test
然而,这意味着您将重新编译这两个 .cpp
文件,即使只有其中一个文件发生了更改。当您开始处理多个文件时,是开始使用 makefile
的好时机,它可以自动执行所有依赖项。