我的项目结构如下:
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
或者那些东西(我现在正打电话)。
答案 0 :(得分:2)
您尚未正确指定源文件。尝试:
ProjName_SOURCES = src/Main.cpp src/Extra.cpp
答案 1 :(得分:1)
这意味着 Extra.cpp 未编译并链接到您的可执行文件。检查你的makefile。