首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接未引用的库会破坏我的程序。

链接未引用的库会破坏我的程序。
EN

Stack Overflow用户
提问于 2013-06-21 16:46:35
回答 1查看 326关注 0票数 4

我有一个与Abaqus接口的后处理程序。该程序与Abaqus 6.9 EF1运行良好。我想更新程序,以便与Abaqus 6.12一起工作。我没有任何运气,使该程序与更新的API工作。

我在Visual 2010中更新了要链接的库列表。所有的东西都能正常地建立和连接。当我运行程序时,在运行main之前,我会收到以下消息

由于程序很大(>120 k行),所以我决定回到基础上来。下面的简单程序运行良好,直到我调用delete。一旦我调用delete,我就会得到同样的错误消息。如果我不链接到Abaqus库,程序就会完全运行。

代码语言:javascript
复制
#include <iostream>

int main( int argc, char* argv[] )
{
    std::cout << "Hello world" << std::endl;

    int *p;
    p = new int(3);
    std::cout << *p << std::endl;
    delete p;

    return 0;
}

澄清:

案例1:不链接到Abaqus库。跑得很好。

Case 2:链接到Abaqus库。抛出调试断言失败的消息。

的底线:我不明白链接而不是使用它们的库如何破坏简单的程序。

在我以前关于Abaqus的问题中,我说服自己,他们已经创建了自己的newdelete运算符。他们的new版本可以被调用,而标准版本的delete被调用吗?如果是,这是解决这些功能范围的一种方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-25 00:00:37

结果是,Abaqus在全局命名空间中定义了自己的operator newoperator delete。因此,我不知不觉地链接到他们的operator new实现。

但是,Visual链接到operator new的Abaqus定义,而不是operator delete的Abaqus定义。相反,Visual链接到operator delete的标准定义。

这些函数不能互换使用,因此我会收到错误消息。但是,因为Abaqus将它们的operator newoperator delete函数放在全局命名空间中,所以我认为我无法控制哪个函数被链接。

更新:以上内容仅部分正确。Abaqus确实定义了自己的operator new,但是他们使用而不是来定义匹配的operator delete --至少在全局名称空间中是这样的。

因此,Visual无法链接到相应的Abaqus operator delete,因为它不存在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17240361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档