autotools undefined引用错误

时间:2013-12-31 12:25:47

标签: c++ namespaces autotools undefined-reference

我的项目结构如下:

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 { ... }

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

似乎唯一可以解决这个问题的问题是将#include "Extra.cpp"添加到Main.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

或者那些东西(我现在正打电话)。

2 个答案:

答案 0 :(得分:2)

您尚未正确指定源文件。尝试:

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

答案 1 :(得分:1)

这意味着 Extra.cpp 未编译并链接到您的可执行文件。检查你的makefile。