我正在寻找错误的来源,因为几个小时没有成功。我的项目由两个子项目组成。第一个是dll,第二个是应用程序(exe)。我简化了原始代码,它是dll的一部分:
#ifndef blub_base
#define blub_base
#include "SomeInterface.hpp"
#include "Object.hpp"
#include <map>
namespace a
{
namespace b
{
class __declspec(dllexport) CBase : public CSomeInterface
{
protected:
CBase() {}
public:
CBase(SomeDifferentObject* f_object_p) { /* concrete implementation in cpp */ }
~CBase() { /* concrete implementation in cpp */ }
bool initialize() { /* concrete implementation in cpp */ }
bool shutdown() { /* concrete implementation in cpp */ }
void foo() { /* concrete implementation in cpp */ }
virtual void blubblub(Object* f_object_p) { /* concrete implementation in cpp */ }
protected:
bool blub1(Object* f_object_p, std::map<uint32_t, Object*>& f_something_rmap) const { /* concrete implementation in cpp */ }
bool blub2(Object* f_object_p, std::map<uint32_t, Object*>& f_something_rmap) const { /* concrete implementation in cpp */ }
void blub3(Object* f_object_p) const { /* concrete implementation in cpp */ }
};
}
}
#endif
#ifndef blub
#define blub
#include "Base.hpp"
namespace a
{
namespace b
{
class __declspec(dllexport) CChild : public CBase
{
private:
CChild() {}
public:
CChild(SomeDifferentObject* f_object_p) { /* concrete implementation in cpp */ }
/// deconstructor
~CChild() { /* concrete implementation in cpp */ }
void blubblub(Object* f_object_p) override { /* concrete implementation in cpp */ }
protected:
bool blub1(Object* f_object_p, std::map<uint32_t, Object*>& f_something_rmap) const override { /* concrete implementation in cpp */ }
bool blub2(Object* f_object_p, std::map<uint32_t, Object*>& f_something_rmap) const override { /* concrete implementation in cpp */ }
void blub3(Object* f_object_p) const override { /* concrete implementation in cpp */ }
};
}
}
#endif
如果我试图在我的应用程序中实例化CChild对象,我会得到CChild类所有函数的链接器错误:
错误75错误LNK2001:未解析的外部符号“public:virtual void\uu thiscall a::b::CChild::blubblublub(类a::b::Object*)”(?blubblub@CChild@b@a@@UAEXPAVObject@23@@Z) 应用程序。obj应用程序错误74错误LNK2019:未解析的外部符号“public:virtual\u thiscall a::b::CChild::~CChild(void)”(?)??1CChild@b@a@@UAE@XZ)函数“public:virtual void*u thiscall a::b::CChild::`vector deleting destructor'(unsigned int)”(?)_ECChild@b@a@@UAEPAXI@Z)应用程序。obj应用程序错误73错误LNK2019:未解析的外部符号“public:u thiscall a::b::CChild::CChild(类a::b::SomeDifferentObject*)”(??)??0CChild@b@a@@QAE@PAVSomeDifferentObject@12@@Z)在函数\u主应用程序中引用。obj应用程序错误77错误LNK2001:未解析的外部符号“受保护:虚拟布尔值调用a::b::CChild::blub1(类对象*,类std::映射,类std::分配器
我使用的是Visual Studio,所有cpp文件都在项目中(已检查多次)。每个函数都是实现的,例如CChild::CChild(somedifferentitobject*f_object_p):CBase(f_object_p){
似乎找不到相关的cpp文件?!
非常感谢你的帮助!
亲切的问候,鲍比
它不起作用,因为类总是导出的。它们需要由dll项目导出,并由使用该dll的项目导入。
要解决这个问题,添加头文件,例如ab_dll. h和那里:
#ifdef AB_DLL_EXPORT
#define AB_DLL_API __declspec(dllexport)
#else
#define AB_DLL_API __declspec(dllimport)
#endif
然后在类中使用该宏:
class AB_DLL_API CBase : public CSomeInterface
{
//...
};
class AB_DLL_API CChild : public CBase
{
//...
};
另外,在VS dll项目中,在PreprocessorDefinitions
中添加AB\u dll\u EXPORT
,以便导出类。这样,如果在项目中定义了AB\u DLL\u EXPORT
,则将导出类,否则将导入类。
我认为我的模板使用不当,但我不知道我做错了什么。这就像模板链表无法确定它需要使用我的术语类一样。 名单- 以下是Visual Studio 2012的确切错误: > 错误LNK1120:1未解决的外部C:\用户\迈克尔\文档\魔术公文包\尚普兰\课程工作\数据结构\pa2\调试\pa2.exe 标题。H 功能。cpp 链接列表。H 术语h
我是c语言新手,我有以下问题: 文件:-main。cpp-实用程序。h-实用程序.cpp 当我在做: g-c-std=c 11实用程序。cpp(编译)g-c-std=c11main。cpp(编译) 当我尝试链接时: g -o main.o utils.o /usr/lib/gcc/i686 redhat-linux/4.8.3/../../../crt1.o:在函数main'utils的引用。o:
我试图实现一个协议栈使用协议层设计模式:http://www.eventhelix.com/realtimemantra/patterncatalog/protocol_layer.htm 在我们的项目中,我将所有层作为单独的DLL。我有以下几层: > LLC层dll MAC层dll 物理层dll 我在同一个解决方案中还有另一个项目,它实现了设计模式,并实现了协议层的一般功能。我的所有层都继承自协
我正在使用React路由器与链接,以改变URL和导航通过应用程序。在阅读列表中,我使用以下代码导航用户阅读edit: 我定义了以下路由: 我怎样才能解决那个问题?
我是C语言的新手,我和SFML一起建立了一个项目,运行良好,根据Visual Studio,我没有代码问题,但是当我调试时,我得到这些错误消息: 错误1错误LNK2019:未解决的外部符号"__declspec(dllimport)public:__thiscallsf::String::String(char const*, class std::locale const 错误2错误LNK201
嘿,伙计们,我在安装了react native payola包装后制作了一个react native应用程序,我面临这个问题 如何解决这些错误......