自动工具未定义的引用错误

autotools undefined reference error

本文关键字:引用 错误 未定义 工具      更新时间:2023-10-16

我的项目结构如下:

ProjName/
    | configure.ac
    | Makefile.am
    | src/
        | Main.cpp
        | Main.h
        | Extra.cpp
        | Extra.h

Main 和 Extra 都是同一命名空间中的类 MyNamespace 。即使Main.h包含Extra.h我收到链接器错误:

in function MyNamespace::Main::Main():
undefined reference to MyNamespace::Extra::Extra()

我已经确保所有类都被包裹在

namespace MyNamespace { ... }

以及向Main.cpp添加using namespace MyNamespace,并且两个类的构造函数都是正确的。

似乎唯一可以解决此问题的是向Main.cpp添加#include "Extra.cpp",但这只会破坏使用头文件的目的,并且当我向项目添加更多文件时会变得非常乏味。

编辑:

Makefile.am看起来像:

bin_PROGRAMS= ProjName
ProjName_CPPFLAGS= -I$(top_srcdir) -I$(top_srcdir)/src
ProjName_SOURCES= src/Main.cpp Main.h

我的项目使用Ogre3D库,所以也有一些Ogre特定的东西。我尝试将 cpp 和头文件添加到 ProjName_SOURCES 并运行./bootstrap && ./configure && make但随后出现错误,如下所示:

No rule to make .deps/src/ProjName-Extra.Po

或者类似的东西(我现在正在打电话)。

您没有正确指定源文件。 尝试:

ProjName_SOURCES = src/Main.cpp src/Extra.cpp

这意味着 Extra.cpp 不会编译并链接到可执行文件。检查您的生成文件。