c - 从单个 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
成自己的文件来实现我的目标,但假设我不想这样做。
解决方案
通常,在库中定义不是问题,因为链接器只有在任何非库二进制文件main()
中都没有时才会使用它。main()
这甚至可以用于优势,包括一个 default main()
。例如,请参阅与(或如果您使用 flex)一起使用的 Posix 标准-ll
库。lex
-lfl
如果您确实要确保该符号不可用于解析,您可以从库中删除该符号。有一些用于操作二进制文件的工具,这些工具因系统而异。例如,看一下objcopy--strip-symbol
的选项。(这不会删除已编译的代码;它只会使它无法解析。)
推荐阅读
- c++ - 回调函数如何修改对象成员?
- r - 在ggplot2上为不同长度的向量创建小提琴图?
- php - 如果 smiliar foreach 然后加在一起 Laravel 5.2
- mysql - STS:不满足的依赖异常
- javascript - javascript mouseout 事件处理函数不起作用
- c# - Struct Wrapper 类型的默认相等比较 C#
- ruby-on-rails - 无法将我的项目推送到 Heroku...rake 中止 Sprockets 文件未找到
- c# - C# Code-First 无法识别数据注释
- powershell - 参数集:需要特定的参数组合
- github-pages - 使用 github 页面写入服务器