首页 > 解决方案 > 从单个 C 源代码生成库和二进制文件

问题描述

我有一个带有 main 函数和其他一些函数的 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成自己的文件来实现我的目标,但假设我不想这样做。

标签: ccompilation

解决方案


通常,在库中定义不是问题,因为链接器只有在任何非库二进制文件main()中都没有时才会使用它。main()这甚至可以用于优势,包括一个 default main()。例如,请参阅与(或如果您使用 flex)一起使用的 Posix 标准-ll库。lex-lfl

如果您确实要确保该符号不可用于解析,您可以从库中删除该符号。有一些用于操作二进制文件的工具,这些工具因系统而异。例如,看一下objcopy--strip-symbol的选项。(这不会删除已编译的代码;它只会使它无法解析。)


推荐阅读