【问题标题】:compile a stream of data in C?用C编译数据流?
【发布时间】:2011-09-30 12:41:10
【问题描述】:

是否可以编译数据流而不是使用 gcc 编译 .c 文件?例如,是否可以直接编译代码,而不是将代码存储在任何xyz.c 文件中?

【问题讨论】:

  • 如果没有提供文件,gcc 将不知道如何从流中创建目标文件,也不知道如何在源代码中引用函数。为什么不简单地将数据流式传输到文件中?另一种可能性是使用像 CINT 这样的解释器。
  • 明白。不想把事情搞得这么复杂。不过谢谢:)
  • 如果有人感兴趣,这也适用于 clang!

标签: c stream compilation


【解决方案1】:

您可以创建一个文件,将代码流式传输到其中,然后创建另一个进程(即编译器),将文件作为参数提供给它。然后创建另一个进程(即链接器),它将为您创建一个 exe。最后,您可以将该 exe 作为新进程启动。 但是为什么呢?!:)

【讨论】:

  • 我正在开发一个项目-在线 c 编译器。我只是想知道,与其实际保存文件然后编译它,是否可以编译和运行它而不将其保存在文件中。 :)
  • @Kazekage 我爱罗:不,我不认为你可以。
  • @Armen:你可以...看到my answer(当然生成的二进制文件仍然保存为文件)
【解决方案2】:

This 可能会回答你的问题,尽管它很少有用。

【讨论】:

  • 对不起,如果我不简单地写谢谢,但它太短了,所以想象一下我(每次)感谢你,也感谢你的反对:)
  • 不用担心@Shin;你不需要感谢我(尽管我很感激)。下次您的答案只是一个链接时,将链接中的一些信息复制到 SO 本身:这样,读者无需单击链接即可看到答案的主要部分。如果他们想更深入地挖掘,可以单击链接并阅读其余部分。
  • 感谢您的建议;我只是关心许可,现在读到这是带有署名的 cc-wiki,我想它与 rc 许可兼容。
  • 只要您不过度复制/粘贴并清楚标明来源,我认为它属于“合理使用”规则。我刚才answered 一个基本上是源链接的问题:)
【解决方案3】:

使用 gcc 选项 -x-

$ echo -e '#include \nmain(){puts("Hello world");return 0;}' | gcc -xc -ogarbage - && ./garbage && rm 垃圾 你好世界

上面的单行命令由以下几部分组成:

echo -e '#include \nmain(){puts("Hello world");return 0;}' # "source" | # 管道 gcc -xc -ogarbage - # 编译 && # 和 ./garbage # 运行 && # 和 rm垃圾#删除

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多