【问题标题】:Compilng s_sin.c of GNU libm after changing the source更改源代码后编译 GNU libm 的 s_sin.c
【发布时间】:2018-11-26 15:20:51
【问题描述】:

我想稍微修改 libm 的 sin 函数(来源:s_sin.c)来试验一些数值。但是,我看不到如何编译修改后的源代码。

我想避免执行“./configure, make”。因此,为了解决所有依赖关系,我尝试在我的系统中使用 libm.a 编译 s_sin.c。但是我的编译器很快就拒绝了编译,因为它在源文件中找不到头文件“mydefs.h”。源码中有很多这样的头文件。

我的问题是:在 GNU libm 中尝试更改单个数学函数并进行编译的最简单方法是什么?谢谢。

【问题讨论】:

  • 为什么要避开./configure; make?这应该成为问题(因为这是正常的构建过程)。您可能会对传递给configure 的一些--prefix 和/或chroot(2) 设施(例如schroot)感兴趣。否则,您的问题是XY problem。在所有情况下,您都应该编辑您的问题以激发它并提供更多信息(和背景)
  • 你也可以和musl-libc一起玩,因为它被设计为与glibc共存
  • 另外,您可以在没有下一个 make install 的情况下使用 ./configure; make 并在构建树中使用 libc

标签: c glibc libm


【解决方案1】:

我想避免执行“./configure, make”。

您无法避免这种情况(因为这是通常的构建过程),但您可以将更多参数传递给configure。先试试configure --help。您可以避免使用下一个 make install(或将一些 DESTDIR=/tmp/somedir/ 传递给它)。

我的问题是:在 GNU libm 中尝试更改单个数学函数并进行编译的最简单方法是什么?

我会推荐一个小的chroot(2)-ed 环境。 Debian 有 schroot 和 debootstrap 让这变得相当容易。

那么你仍然使用./configure - 可能使用不同的--prefix ...- 后跟make。你可能想要也可能不想make install

考虑使用musl-libc,因为它可以与您系统的libc 共存

顺便说一句,sin 是一个不寻常的函数(就像-lm 中的许多函数一样)。您可以在那里设置一个断点来检查您的大多数系统程序是否不使用它。不要忘记备份系统的 libc 并运行一些 static shell 以防万一(也许是 sash,因为许多核心实用程序是内置的:静态 sash 包含 internal tar、cp、mv 等的变体,不依赖于任何外部 libc)

您还可以(临时)在某些标题中添加一些#define sin(x) mysin(x)(例如/usr/include/math.h)或使用LD_PRELOAD tricks。

(不清楚您真正想要做什么。libm.so 仅由程序使用,而不是单独使用;您想要做什么实际的数值实验??)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    相关资源
    最近更新 更多