【问题标题】:How to automatically link symbols using TinyCC?如何使用 TinyCC 自动链接符号?
【发布时间】:2012-02-14 17:42:10
【问题描述】:

在我的 C 程序中使用 TinyCC 让我可以将 C 用作一种脚本语言,即时重新加载 C 文件,并做很多相当简洁的事情......但是,有一件事情真的让我很困扰。链接。

我使用 TCC_OUTPUT_MEMORY 执行正常的 tcc_new 和 tcc_set_output_type,但如果我不包含很多这些:

    tcc_add_symbol(tcc_ctx, "printf", &printf);
    tcc_add_symbol(tcc_ctx, "powf", &powf);
    tcc_add_symbol(tcc_ctx, "sinf", &sinf);

一切都非常有限。

我想要一种在宿主程序中自动引入所有符号的方法。我不想手动链接 libc 和 libm 中的每个最后一个函数。存在哪些机制来促进自动链接或添加符号。如何在我的代码中使用 libm 而无需手动添加最后一个组件。

我目前正在使用 GCC,但在另一个平台上使用 Visual Studio 来编译我的程序。我可以完全切换到 TCC。

【问题讨论】:

    标签: linker symbols tcc


    【解决方案1】:

    TCC 带有一个基本的运行时库 libtcc1。它包括您提到的基本功能。因此,在大多数情况下,您可以将所有调用替换为单个 tcc_add_library(tcc_ctx, "libtcc1.a")。

    libtcc1 不完整,可能需要手动添加一些功能。

    【讨论】:

    • libtcc1.a 不包含 printf()powf()sinf() 等的实现。相反,它是一组帮助程序(以双下划线开头),用于定义有效的函数编译器决定用函数调用实现比在代码生成中更容易实现。请参阅files in the lib/ subdirectory__va_start 之类的助手等。因此,如果您看到 printf() 等工作的链接,它们来自标准 libc,因为您没有使用 -nostdlib。运行tcc -vv 看看我在说什么。
    猜你喜欢
    • 2013-12-04
    • 2013-05-07
    • 2012-01-21
    • 2011-12-13
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多