加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C程序链接到错误的功能版本

发布时间:2020-12-16 05:02:07 所属栏目:百科 来源:网络整理
导读:我正在尝试调试错误版本的函数被调用导致段错误的问题.我正在编译的代码是机器生成的,包含一个名为’times’的函数,它复杂地对它的两个参数进行乘法运算.在链接到更高级别的目标文件之前,此代码被编译为.o. 运行此代码时,segfaults和gdb表示它处于glibc的’t
我正在尝试调试错误版本的函数被调用导致段错误的问题.我正在编译的代码是机器生成的,包含一个名为’times’的函数,它复杂地对它的两个参数进行乘法运算.在链接到更高级别的目标文件之前,此代码被编译为.o.

运行此代码时,segfaults和gdb表示它处于glibc的’times’版本中,甚至不会使用相同数量的参数.这个代码中没有’#include任何地方的实例.

将时间名称更改为times1可以解决问题.这不是一个长期的解决方案,但由于机器生成的代码性质和手动编辑此函数的名称一直没有吸引力.

整个烂摊子用-Wall编译清洁,所以我不知道在哪里看.关于如何解决这个问题的任何想法?

Compile chain:
    gcc -Wall -I. -g --shared -o dpd.o -fPIC *.c (mahine generated code here)
    gcc -g --std=c99 -c -fpic getData.c -I/usr/local/include -L/usr/local/lib -lmatio -I/usr/local/include/iverilog -I$(MATLAB)
    gcc -g -shared -o getData.vpi getData.o $(MATLAB)/dpd.o -lvpi -lmatio -L/usr/local/lib

解决方法

C仅使用函数的名称作为标识符,因此具有相同名称的任何两个(导出的)函数都将发生冲突.正常的approch是为库中具有唯一前缀的所有导出名称添加前缀.另一种方法是使用C作为“更好的C”,并使用C编译器简单地构建C代码,使用C名称修改.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读