gpt4 book ai didi

c - 如何测试 C 函数是否可链接

转载 作者:行者123 更新时间:2023-11-30 18:29:11 26 4
gpt4 key购买 nike

我刚刚发现我使用的一个 C API 中缺少一个函数(它可以编译,但不能链接)。我想测试整套 API 函数。我们的想法是让事情变得简单,例如:

include <myapi.h>
void main(void) {
func1;
func2;
...
}

但是这可以很好地编译和链接,因为编译器(gcc)优化掉了未使用的函数指针。如果我使用 func1() 代替,如果该函数确实丢失,我会收到链接器错误。但所有的函数调用都很复杂,为所有函数编写显式参数需要花费几天的时间。

我可以使用 nm 来查询库,但首先它是一整套 .so 文件,其次它可能取决于 API header 中的 #defines。

是否有可以在 C 文件中使用的简单语法?或者也许只是 gcc 的一个(未)优化选项?

最佳答案

一种可能的解决方法是使用函数指针来伪造用法:

include <myapi.h>
typedef void Func_T(void); // Function type for easier handling
Func_T * volatile Func; // Function pointer where functions are stored
/* Macro to do the assignment */
#define TEST(f) Func = (Func_T*)f
int main(void) {
TEST(func1);
TEST(func2);
...
}

链接器可能仍会删除这些函数,但值得一试。

编译器通常提供属性或编译指示来强制保留符号。如果链接器尝试删除它,它对于保留 Func 可能很有用。

关于c - 如何测试 C 函数是否可链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40418988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com