问题标签 [libm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在 Code::Blocks 中链接静态系统库 libm.a
我使用以下命令在 shell 中成功编译了我的程序。它生成示例二进制文件并正常工作。
但是,如果我尝试在 Code::Blocks 中编译,它就不起作用。项目构建选项如下所示:
编译器给出一个错误:
我想我在链接静态系统库时犯了一个错误libm.a
。我怎样才能正确链接它?
c++ - gcc会自动链接libm吗?
在我的程序中,我既不包含 math.h,也不将 -lm 链接到它:g++ -std=c++11 -g -O0..
仍然 ldd 显示这个
gcc 会自动调用数学函数吗?如果是,我怎样才能找出这些函数是哪些以及它们是从哪里调用的?
ubuntu - 编译://lib/x86_64-linux-gnu/libm.so.6:添加符号时出错:缺少 DSO
我无法在我的 64 位 Ubuntu、Linux 上编译用于 32 位 unix 系统的代码。有谁知道可能是什么问题?
c - C 库的实现在哪里?
我想知道C
库是如何实现该sqrt()
功能的。我得到了头文件math.h
。/usr/include
但实际的实现在哪里?我正在做一个数值计算项目,并希望查看math.h
.
c - 为什么 atan 第一次调用比下一次调用慢得多?
以下代码演示了 atan 计算时间可能会有很大差异:
从我的机器来看,最坏的时间大约是 15 微秒,而最佳时间是 0(太小而无法测量)。
我机器上的平均时间(此处未显示)约为 1 或 2 us。
我尝试了不同的编译标志(-O3、静态链接到 libm 等),但我找不到导致最坏时间慢得多的原因。任何的想法?
编辑:我使用的是 Ubuntu 14.04 - gcc 4.8.4
edit2:将 atan2 替换为 atan。我对 atan2 是分段定义的并且不同的分支可能需要不同的时间这一事实不感兴趣。我有兴趣消除即使调用 atan 而不是 atan2 也会出现的异常值。
编辑3:
编辑4:
看来第一个电话是罪魁祸首!循环外的调用被编译器优化掉了,如果我们强制 atan 在循环外进行评估 for x0
,所有的调用都相当快......
c - 在 C 中使用 pow 时,CMake 是否可以检测到我是否需要链接到 libm?
对于某些编译器,在 C 程序中使用pow
和某些其他函数需要链接到m
库。但是,一些编译器不需要这样做,并且在链接到m
库时会出错。std::thread
使用and的 C++ 存在几乎相同的情况pthread
,但 CMake 模块FindThreads
完全缓解了这种情况 - libm 是否有一些类似的模块?
检测如何使用 CMake 的最佳方法是什么?这是我目前的解决方案,它不太理想,因为 C 编译器不仅仅是 GCC 和 MSVC:
这适用于我的目的,但我很确定在某些情况下它会失败并需要手动用户干预,这对于不了解这种默默无闻的人来说并不有趣。理想情况下,我不希望用户必须通过命令行指定他们的编译器是否奇怪;我想在 CMake 中自动检测它,因为这是 CMake 的重点。
linux - 为什么使用 sqrt 的程序在不指定数学库的情况下使用 gcc 编译
给定以下程序:
并编译:
成功了吗?为什么它不需要 -lm 或 /usr/lib/blah/libm.so.x
使用 ldd 检查二进制对象会产生:
没有引用 libm。但是,如果我使用 nm -D 查看 libc.so.6 库或 ld-linux-x86-64.so.2 库,则这些库中没有 sqrt 函数。
这里发生了什么?gcc 是否神奇地包含了一组默认的常用函数或其他东西?
android - 使用android ndk编译ffmpeg时如何保持兼容性
我已经成功地将 ffmpeg 编译为我的项目的静态库,在 Application.xml 中指定了 android-platform 19,如下所示:
我在设备(4.4)上测试我的项目,它运行良好。但它会在 4.0 设备上崩溃。
所以我想将 APP_PLATFORM 更改为较低的版本,例如:
但是ide出现了这样的错误。
当我将其更改为更低版本时:
出现更多错误:
我知道由于缺少 libm,log2 引用未定义,但据我所知,Android 在构建时会自动链接到 libm。http://mobilepearls.com/labs/native-android-api/ndk/docs/STABLE-APIS.html
那么如何在编译 ffmpeg 时保持兼容性,以便在较低版本的设备上很好地运行我的项目。
c++ - 使用 arm-none-eabi-g++ 链接成功,但没有 arm-none-eabi-gcc
我正在使用 Launchpad Arm 编译器工具。具体来说,
arm-none-eabi-g++ 和 arm-none-eabi-gcc 来自:
(用于 ARM 嵌入式处理器的 GNU 工具)5.2.1 20151202(发布)[ARM/embedded-5-branch 修订版 231848]
我有一个针对 STM32F103 处理器的简单程序,除了证明我可以编写硬件并调用数学库中的函数之外没有其他目的。这就是全部:
当我尝试构建它时,我收到一个链接器错误,告诉我有一个未定义的 sqrt 引用。构建是使用 arm-none-eabi-gcc 完成的。偶然我发现,如果使用 arm-none-eabi-g++ 完成构建,使用相同的命令行参数,则链接成功执行。
我写了一个 Makefile 来演示区别:
它给出以下结果:
那么谁能告诉我为什么这两个编译器的行为不同?我忽略了什么简单的事情?如果我想使用 arm-none-eabi-gcc,我应该如何确保与 libm 和其他人的正确链接?
我看过 Freddie Chopin 的 makefile,但它们太复杂了,我无法解开。
linux - 如何不使用英特尔 C 编译器与 libm 链接
我想编译一些非常基本的测试代码,调用 log 函数,然后使用 Intel C 编译器在 Linux 的标准输出上打印结果。我希望将代码链接到 libimf(英特尔的数学函数库)而不是GNU libm,以便我可以确定log
调用了哪个函数。
到目前为止,我已经设法与 libimf.so 链接-limf
,但默认情况下icc
与 libm.so 链接。我想避免这种情况。我应该如何进行?-lm