gpt4 book ai didi

c++ - 在 Visual Studio、C++ 中使用 FDLIBM 库

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:35 34 4
gpt4 key购买 nike

我将一些代码从 MATLAB 移植到 C++,发现 MATLAB 的 sin() 和 cos() 函数产生的结果与 C++ 库中的 sin() 和 cos() 函数略有不同。为了消除这些差异,我希望我的 C++ 代码调用 fdlibm 5.3 库中的 sin() 和 cos() 函数,我认为这就是 MATLAB 用于 sin() 和 cos() 操作的函数。

但是,我在使用 fdlibm 库时遇到了一些困难。我使用的是 Visual Studio 2010,并从 http://www.validlab.com/software/ 下载了 fdlibm 头文件和源代码。 ,但不确定使用这些文件的最佳方式。我是否需要先将文件构建到静态或动态库中,然后将其链接到我的代码?另外,如何指定我想使用 fdlibm 中的 sin() 而不是 C++ 库中的 sin()?我是否需要修改 fdlibm 源代码以使 sin() 和 cos() 函数位于命名空间内?

非常感谢任何指导。

最佳答案

基本上,您有两个任务要完成:

  • 您必须编译 fdlibm 源代码以生成适合您目的的目标模块。
  • 您必须将目标模块与您的其他目标模块链接起来。

我发现第一个任务有两个问题。第一,来自像 fdlibm 这样的项目的源代码通常被编写为可移植到许多系统,并且可能涉及大量的配置工作。它们不是非常简单的 C 或 C++ 代码,而是可能使用许多预处理器条件来选择某些选项,并且源代码所在的包可能包含脚本来为编译做各种准备工作。

第二,您希望源代码符合声明 sincos 的 C++ 标准规范。如果您拥有的 fdlibm 包支持 C++,这可能不需要您做任何工作。否则,您可能必须修改源代码以将 sincos 定义包装在 std 命名空间内,或者以其他方式修改源代码。

第二个问题是链接。不需要使用库。您可以简单地编译包含 sincos 的源文件以生成一个(或多个)目标模块,然后将该目标模块(或多个模块)与您的其他目标模块链接起来对象模块。如果您愿意,您可以改为创建一个库,将带有 sincos 的目标模块放入库中,然后将库与您的目标模块链接起来。对于大多数常见的链接器,您只需将库列为链接器的输入即可将库与目标模块链接起来,与列出目标模块的方式相同。 (一些链接器还有其他引用库的选项,但通常只需提供其正常文件路径就足够了。)您可以根据需要创建和链接静态或动态库。如果您使用动态库,它必须在可执行文件运行时存在。对于您自己使用的简单应用程序,不需要使用动态库(甚至不需要使用静态库;对象模块就可以)。 (本质上,库的目的是为了更容易地向其他人分发对象模块,或者组织大型项目。简单的应用程序不需要库。)

关于链接的另一个注意事项:当您提供自己的 sin 和 cos 时,链接器有两种实现可供选择:您对 sin 和 cos 的实现以及 sin 和 cos 的标准库实现。通常,标准库链接在任何用户指定的文件之后,因此只需指定您的目标模块或库就足以确保使用您的 sin 和 cos,而不是库的 sin 和 cos。如果不是这种情况,应该有链接器选项来更改考虑库的顺序。

关于c++ - 在 Visual Studio、C++ 中使用 FDLIBM 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12128462/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com