我有一个包含主要函数和一些其他函数的 C 源文件。像这样的东西:
#include "stdlib.h"
int program(int argc, char ** argv)
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);
return a + b;
}
int main(int argc, char ** argv)
{
return program(argc, argv);
}
我知道如何编译它来生成二进制文件。
有没有一种方法可以将其编译成目标文件并省略 main
符号/函数?
我知道我可以通过将 main
拆分到它自己的文件中来实现我的目标,但假设我不想这样做。
最佳答案
通常,在库中定义 main()
不是问题,因为链接器只会在任何非库中没有 main()
时使用它-库二进制文件。这甚至可以用于优势,包括默认的 main()
。例如,参见与 lex
(或 -lfl
,如果您使用 flex)一起使用的 Posix 标准 -ll
库。
如果确实要确保该符号不可解析,可以将该符号从库中移除。有一些用于操作二进制文件的工具,这些工具因系统而异。例如,查看 objcopy 的 --strip-symbol
选项. (这不会删除已编译的代码;它只会使其无法解析。)
关于c - 从单个 C 源代码生成库和二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53913770/