C ++库无法找到它使用的另一个库

时间:2016-02-08 15:58:49

标签: c++

我正在使用自定义构建的SDK构建C ++控制台应用程序。我有头文件和库,但我没有源代码(实现)。

在一个特定情况下,由于位于不同的名称空间中,一个类中的方法(比如说A类)无法访问类B.

如果知道我没有源代码,我该如何解决这个问题。

在main函数中,我通过编写以下命令来创建对象引用:

Event *event=new Event(); 

在编写此语句时,我收到以下编译器错误:

  

(Event.o):在功能上   COM :: EGI ::服务:: MFF :: API ::活动:: setBeginTime(EGIBase :: EGIXStringWrap)&#39 ;:   Event.cpp :(。text + 0xacd):未定义的引用   EGIBase :: EGIXStringWrap :: getStringCopy [ABI:cxx11]()'

代码如下:

#include "Event.h"
#include "EGIXStringWrap.h"
int main()
{
    Event *event=new Event(); // This is where the error crops up.`
}

PS:EGIXStringWrapEvent是类。 Event的setBeginTime()方法调用EGIXStringWrap的getStringCopy()方法

2 个答案:

答案 0 :(得分:1)

  

(Event.o):在功能上   COM :: EGI ::服务:: MFF :: API ::活动:: setBeginTime(EGIBase :: EGIXStringWrap)“:   Event.cpp :(。text + 0xacd):未定义的引用   EGIBase :: EGIXStringWrap :: getStringCopy [abi:cxx11]()'

鉴于您发布的内容,这意味着名称空间 com :: egi :: services :: mff :: api 中的事件类的函数setBeginTime()具有以下参数:输入属于 EGIBase 名称空间的 EGIXStringWrap

直到这里一切都很顺利,因为编译器会在该行之后继续解析。我们可以推断出 EGIBase 命名空间对于类 Event 的库是可见的。

<强>假设:

然后,编译器无法在 EGIBase :: EGIXStringWrap 命名空间内找到对 getStringCopy 的引用,该命名空间是二进制形式(可能是.o)预计将使用兼容C ++ 11的编译器构建。

鉴于我的假设是正确的:

首先,您不可能做任何事情,因为已经编译了这些库,更好地联系他们的提供者。

其次, getStringCopy 位于同一名称空间 EGIBase 中,因此必须可见。

除此之外,我发现生成的二进制库不太可能与以前的C ++版本的库不兼容(尽管不是不可能)。

答案 1 :(得分:1)

以防我们的其他客户遇到此问题,这只是一个链接订单问题;图书馆很好。如果您有任何疑问,请联系我们的支持 - EGI。