C 程序链接到错误版本的函数

标签 c linker glibc

我正在尝试调试调用错误版本的函数导致段错误的问题。我正在编译的代码是机器生成的,包括一个名为“times”的函数,该函数对它的两个参数进行复杂的乘法运算。此代码在链接到更高级别的目标文件之前被编译为 .o。

当运行此代码时出现段错误,gdb 表明它在 glibc 的“times”版本中,它甚至不采用相同数量的参数。这段代码中的任何地方都没有“#include”的实例。

将 times 的名称更改为 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 仅使用函数名作为标识符,因此任何两个(导出的)同名函数都会发生冲突。正常的方法是在库中为所有导出的名称添加一个唯一的前缀。另一种选择是将 C++ 用作“更好的 C”,并使用 C++ 编译器简单地构建您的 C 代码,利用 C++ 名称修改。

关于C 程序链接到错误版本的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13204047/

相关文章:

纯 C 中的并发编程 - Windows/Linux

c++ - 所需输出后出现 glibc 错误

linux - 如何执行流式字符转换?

c++ - 缺少有关 Boost 的详细信息(.lib 文件)

c++ - 更改预处理到文件后出现错误 1 ​​错误 LNK1104

c++ - 为什么在 2 个 .CPP 文件中包含此头文件(带 Header Guard)会导致命名冲突?

c - 了解 glibc

C 处理输入

c++ - 使用 OpenMP 并行运行的最简单示例

c - 删除二叉搜索树的两种递归算法之间的区别