Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在VisualStudio中使用FDLBM库C++ 我将一些代码从MATLAB移植到C++中,发现MATLAB的Sin和COS函数在C++库中产生了与Sin和COS函数稍微不同的结果。为了消除这些差异,我希望我的C++代码从FDLBM 5.3库调用Sin和COS函数,这是我认为MATLAB用于Sin和COS操作的原因。_C++_C_Visual Studio 2010_C Libraries - Fatal编程技术网

在VisualStudio中使用FDLBM库C++ 我将一些代码从MATLAB移植到C++中,发现MATLAB的Sin和COS函数在C++库中产生了与Sin和COS函数稍微不同的结果。为了消除这些差异,我希望我的C++代码从FDLBM 5.3库调用Sin和COS函数,这是我认为MATLAB用于Sin和COS操作的原因。

在VisualStudio中使用FDLBM库C++ 我将一些代码从MATLAB移植到C++中,发现MATLAB的Sin和COS函数在C++库中产生了与Sin和COS函数稍微不同的结果。为了消除这些差异,我希望我的C++代码从FDLBM 5.3库调用Sin和COS函数,这是我认为MATLAB用于Sin和COS操作的原因。,c++,c,visual-studio-2010,c-libraries,C++,C,Visual Studio 2010,C Libraries,但是,我在使用fdlibm库时遇到了一些困难。我正在使用Visual Studio 2010,并从下载了fdlibm头文件和源代码,但不确定使用这些文件的最佳方式。我是否需要首先将文件构建到静态或动态库中,然后将其链接到我的代码?此外,我如何指定我想使用来自FDLIBM的罪恶,而不是从C++库中使用?我是否需要修改fdlibm源代码,以便sin和cos函数位于名称空间中 非常感谢您的指导。基本上,您有两项任务要完成: 必须编译fdlibm源代码以生成适合您的目的的对象模块。 必须将对象模块与其他

但是,我在使用fdlibm库时遇到了一些困难。我正在使用Visual Studio 2010,并从下载了fdlibm头文件和源代码,但不确定使用这些文件的最佳方式。我是否需要首先将文件构建到静态或动态库中,然后将其链接到我的代码?此外,我如何指定我想使用来自FDLIBM的罪恶,而不是从C++库中使用?我是否需要修改fdlibm源代码,以便sin和cos函数位于名称空间中


非常感谢您的指导。

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

必须编译fdlibm源代码以生成适合您的目的的对象模块。 必须将对象模块与其他对象模块链接。 我认为第一项任务有两个问题。首先,来自像fdlibm这样的项目的源通常被编写为可移植到许多系统,并且可能需要相当多的工作来配置。他们不是使用非常简单的C或C++代码,而是可以使用一些预处理器条件来选择某些选项,而源进来的包可能有脚本来编写各种准备。

二,您希望源代码符合C++标准规范声明Sin和COS。如果你支持C++的FDLIBM包,这可能不需要你的任何工作。否则,您可能必须修改源以将sin和cos定义封装在std名称空间中,或者修改源

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


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

感谢您的帮助。源代码使用大量预处理器条件是正确的。这会引起问题吗?此外,所有的源代码都是用C编写的,我认为它们不匹配C++规范来声明Sin和COS。是否有理由修改源代码以将sin和cos定义封装在std名称空间中,而不是声明新名称空间并将sin和cos封装在新名称空间中?预处理器条件是一个问题,因为很难确定环境的正确设置,像这样的事情通常都没有很好的记录。关于名称空间,我认为这两种方法都可以:修改sin和cos源以匹配,或者编写自己的例程,在std名称空间中声明,只调用用extern C声明它们的C例程。创建具有不同名称的新命名空间将是一个问题,因为调用sin和cos的源也需要更改为调用NewName::sin而不是std::sin,请注意,我更新了答案,在末尾添加了一条关于库搜索顺序的注释,并确保链接器使用您的sin和cos,而不是标准库的sin和cos。