繁体   English   中英

在Visual Studio,C ++中使用FDLIBM库

[英]Using FDLIBM library in Visual Studio, C++

我将一些代码从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而不是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。 如果不是这种情况,应该有链接器选项来更改考虑库的顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM