Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为所有函数设置GCC默认属性(对于monkeypatching,将所有函数符号设置为弱)_C_Gcc_Monkeypatching_Weak Linking - Fatal编程技术网

为所有函数设置GCC默认属性(对于monkeypatching,将所有函数符号设置为弱)

为所有函数设置GCC默认属性(对于monkeypatching,将所有函数符号设置为弱),c,gcc,monkeypatching,weak-linking,C,Gcc,Monkeypatching,Weak Linking,我目前正在编写一个C项目,其中包括一个单独的测试构建 这些测试是不同的C进程,它使用源代码测试我的代码(TDD)中定义的每个函数 我想让猴子在那些测试中打补丁。我花了一些时间来看看能做些什么,我认为最简单的选择是使用gcc属性特性: 对于测试构建,我希望我的所有函数都是弱函数(即,我想要的效果与我在我的C文件的任何函数声明之前编写的\uuuuu attribute\uuuuu((弱))相同) 我想知道是否有一种方法可以在默认情况下将这个弱属性作为编译选项传递给弱属性,而不是在每次需要时手动传递。

我目前正在编写一个C项目,其中包括一个单独的测试构建

这些测试是不同的C进程,它使用源代码测试我的代码(TDD)中定义的每个函数

我想让猴子在那些测试中打补丁。我花了一些时间来看看能做些什么,我认为最简单的选择是使用gcc属性特性:

对于测试构建,我希望我的所有函数都是弱函数(即,我想要的效果与我在我的C文件的任何函数声明之前编写的
\uuuuu attribute\uuuuu((弱))
相同)

我想知道是否有一种方法可以在默认情况下将这个弱属性作为编译选项传递给弱属性,而不是在每次需要时手动传递。 现在我正在使用一个宏来测试构建是否在测试中,如果是,在我想要的每个函数之前添加这一行。我宁愿避免为了允许一些测试特性而使源代码复杂化

google上的这个主题被重复使用相同的琐碎属性所污染,但我找不到任何设置属性默认值的方法

然而,我发现这本书可能包含解决方案,但我不会仅仅为了希望而支付30美元。所以我在这里问这个问题

有些人可能认为这是一个坏主意,但在我的情况下,我认为这是好主意。请记住,我的测试套件是由大量与我的代码链接的mono C文件组成的,并且请记住,正常的构建不会受到新的测试构建选项的影响。

下面如何

  • 您可以创建一个单独的文件(我们称之为weak.h),其中所有符号都需要在表单中转换为weak
  • #pragma弱函数1

    #pragma弱函数2

    #pragma弱函数3

  • 在测试编译期间,您添加了默认值,包括以下内容
  • gcc-包括弱.h…

    我自己从未尝试过这种方法,但这样做不会影响代码,这似乎是您最想要的

    PS


    刚刚试过,源文件中的几个符号似乎在Ubuntu 18.04 x64上运行,仅供参考,我从Wall和von Hagen那里得到了这本书。搜索
    不会显示任何与您的问题相关的内容。谢谢,您是否尝试查找属性关键字?那里也没有有用的内容。再次感谢。我做了更多的研究,如果不能通过普通的gcc实现,那么可以编写一个可以为函数设置默认属性的gcc插件。但这看起来是一项复杂的任务。我也找不到添加代码行的gcc插件示例。嘿,谢谢你的这种方法:)。这确实比手动修改源代码要好,但这并不像我希望的那样好,因为我仍然需要冗长地列出我的monkeypatched函数。所以我还是不愿意看人们是否知道其他的方法。是的,可能有更好的方法,所以让我们看看是否有人能给出更好的答案。但是为什么要手动列出它呢?您应该构建进入最终构建的函数/符号列表,并使用简单脚本生成weak.h。这是你可能感兴趣的问题的链接。你可以问这个人,@EricSun,要他的脚本并重新使用它。@ninjaconcombre顺便说一句,Eric分享了他的脚本