MSVCRT:sin,cos等的实现(源代码)在哪里?

4

我想知道在Visual C++ CRT中基本三角函数的实现在哪里可以找到。

C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\crt中使用在文件中查找"sin",可以在math.h中找到定义,但没有更多内容(除了一些def文件的EXPORTS部分提到)。

据我所知,sin不是编译器直接将其转换为机器代码的关键字。因此,必须有某个实现,即使该实现归结为一些直接的汇编代码。

我错过了什么?在哪里可以找到代码?

编辑:显然,我的表述不够清晰:我正在寻找源代码,而不是已编译的库或dll。


下次你想知道如何构建一个exe/dll并使用其中的函数,可以使用Dependency Walker来查找。这是一个必备工具。或者像Mark展示的那样使用Dumpbin。 - stijn
@stijn:depends.exe 不显示源代码! - Serge Wautier
微软的C运行时库不是开源的,但是这里有GNU C运行时库的数学头文件实现:http://sourceware.org/git/?p=glibc.git;a=tree;f=math;h=dfc4f1d1e368d62a9f7fb558ca47e3ee23c7e52e;hb=refs/heads/master - Milan
1
大部分安装在我提到的目录中。显然并非全部。 - Serge Wautier
1
微软从英特尔购买了它,但无法获得重新分发源代码的权利。 - Hans Passant
2个回答

5

这个在 MSVCR90.DLL 中:

C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_...>dumpbin /exports msvcr90.dll | findstr sin
         74   48 0007ABA0 _CIasin = __CIasin
         84   52 0007B5C0 _CIsin = __CIsin
         85   53 0007AF38 _CIsinh = __CIsinh
        159   9D 000236AB __get_flsindex = ___get_flsindex
        160   9E 000236AB __get_tlsindex = ___get_flsindex
        177   AF 0007CE73 __libm_sse2_asin = ___libm_sse2_asin
        178   B0 0007D2C1 __libm_sse2_asinf = ___libm_sse2_asinf
        192   BE 0007FE7C __libm_sse2_sin = ___libm_sse2_sin
        193   BF 00080039 __libm_sse2_sinf = ___libm_sse2_sinf
        696  2B7 0002E27A _mbsinc = __mbsinc
        697  2B8 0002E24E _mbsinc_l = __mbsinc_l
       1211  4BA 0007AB60 asin = _asin
       1349  544 0007B580 sin = _sin
       1350  545 0007AF20 sinh = _sinh

更新:

没有提供源代码。似乎提供CRT源代码中的函数库位于crt\src\intel\mt_lib\tran.lib中:

C:\...\crt\src\intel\mt_lib> lib /list tran.lib
    :   :   :
f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\build\INTEL\mt_obj\_sincosf_sse2_.obj
f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\build\INTEL\mt_obj\_sincos_sse2_.obj
f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\build\INTEL\mt_obj\_sinf_sse2_.obj
f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\build\INTEL\mt_obj\_sin_sse2_.obj
f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\build\INTEL\mt_obj\_tanf_sse2_.obj
f:\dd\vctools\crt_bld\SELF_X86\crt\prebuild\build\INTEL\mt_obj\_tan_sse2_.obj
    :   :   :

谢谢你的回答,但我正在寻找源代码,而不是编译后的代码。 - Serge Wautier

1

这是在libc库中。如果你是静态构建的,它在libc.lib中。如果你是动态构建的,那么它在msvcrt.dll中。


谢谢回答,但我正在寻找源代码,而不是编译后的代码。 - Serge Wautier
@Serge-appTranslator 一个愚蠢的问题:你是否安装了CRT源代码? - Foo Bah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接