c - 从单个 C 源代码生成库和二进制文件

标签 c compilation

我有一个包含主要函数和一些其他函数的 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/

相关文章:

c - 近似保序霍夫曼代码

java - 如何在我的 Mac 上编译和运行 Java 程序?

c++ - C++ 中链接文件的编译错误

c - 将动态分配的数组作为C中的参数传递

c - 编译C代码时出错

c++ - 将静态局部变量初始化为编译期间未知的值

javac编译-多个文件夹中的代码

PHP-5.6 编译 tokenizer 错误 Ubuntu 14.04

c - 在宏定义中使用方括号

c - 如何从 C 发送电子邮件