找不到链接库的符号

时间:2010-12-08 19:02:27

标签: c++ symbols

我正在编写一个简单的游戏引擎,我有EntityComponent.h文件:

#ifndef Psycho2D_Core_EntityComponent_
#define Psycho2D_Core_EntityComponent_

#include <string>

namespace psycho2d{

    class EntityComponent{

    private:
        std::string m_name;

    public:
        EntityComponent(const std::string &name);

        virtual ~EntityComponent();

        const std::string& getName() const;

        virtual void initialize() = 0;

        virtual void loadProperties() = 0;      

        virtual void update() = 0;

        virtual void destroy() = 0;

    };

}

#endif

相对的EntityComponent.cpp文件:

#include "EntityComponent.h"
#include <string>

psycho2d::EntityComponent::EntityComponent(const std::string &name){
    this->m_name = name;
}

psycho2d::EntityComponent::~EntityComponent(){}

inline const std::string& psycho2d::EntityComponent::getName() const{
    return this->m_name;
}

这两个文件是框架的一部分(我正在使用Mac)。他们汇编得很好。 问题是当我编写一个使用该库的可执行文件时。 我创建了一个EntityComponent的子类,并进行编译。但是,如果我调用getName()函数,链接器会告诉我:

"psycho2d::EntityComponent::getName() const", referenced from:
_main in main.o
Symbol(s) not found
Collect2: ld returned 1 exit status

我能做什么? 感谢。

4 个答案:

答案 0 :(得分:3)

如果要从多个.cpp文件中引用内联函数的代码,请将其放在头文件中。

参考here

答案 1 :(得分:2)

外部链接inline函数必须在每个使用它的翻译单元中定义(实际上相同)。

因此,请从定义中删除inline,或将定义放在头文件中。

干杯&amp;第h。,

答案 2 :(得分:0)

您的(稍微修改为包含子类到文本)代码在我的机器上编译得很好(Mac也是.GCC 4.2.1)

尝试删除所有.o文件并使用干净的目录进行编译。如果那也失败了,我会尝试删除内联定义。

答案 3 :(得分:0)

尝试从您的实施中删除inline限定符。