GCC /弱符号功能:为什么这个段错误?

时间:2014-04-10 07:02:17

标签: c gcc mingw mingw-w64 weak

对于单元测试,我想在"外部"中替换一个功能。通常,我使用包装机制 - 但不幸的是,这不适用于从同一编译单元内调用该函数。

我的想法是将功能标记为"弱"所以我能够在测试应用程序中重新实现它。通常,这可以使用以下代码:

文件myfunctions.c(这是测试中的代码):

#include "myfunctions.h"
int weakFunction(int param) __attribute__((weak));

int weakFunction(int param)
{
  return 2*param;
}

int myfunction(int param)
{
  int result = weakFunction(param);
  return (result == (2*param)) ? 1:0;
}

文件main.c

#include "myfunctions.h"
int weakFunction(int param)
{
  return 3*param;
}

int main()
{
  return myfunction(5);
}

此示例按预期工作 - 当我从main.c中删除weakFunction时,程序返回1,当我添加weakFunction时,程序返回0.在这一点看起来很好。

但是,只要我在myfunctions.c中更改顺序如下,生成的程序就会因为分段错误而崩溃:

文件myfunctions.c(修改后的顺序):

#include "myfunctions.h"
int weakFunction(int param) __attribute__((weak));

int myfunction(int param)
{
  int result = weakFunction(param);
  return (result == (2*param)) ? 1:0;
}

int weakFunction(int param)
{
  return 2*param;
}

有什么想法吗?可能是崩溃的原因是什么?

我在Windows 7上使用GCC 4.8.1(MinGW w64 build)。

感谢您的帮助! 弗洛里安

0 个答案:

没有答案