【问题标题】:MSVCRT: Where is the implement (source code) of sin, cos et al?MSVCRT:sin、cos 等人的实现(源代码)在哪里?
【发布时间】:2011-10-01 15:20:55
【问题描述】:

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

Find in files for "sin" in C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\crt 显示了 math.h 中的定义,但仅此而已(除了在某些部分的 EXPORTS 部分中提及def 文件)。

据我所知,sin 不是编译器将自身转换为机器代码的关键字。所以在某个地方一定有一个实现,即使这个实现归结为一些直接的汇编代码。

我在这里缺少什么? codez 在哪里?

编辑:显然,我不够清楚:我正在寻找源代码,而不是编译的 lib 或 dll

【问题讨论】:

  • 下次你想知道:使用该函数构建一个 exe/dll,然后使用 Dependency Walker 找出。是必备工具。或者像 Mark 展示的那样使用 Dumpbin。
  • @stijn:depends.exe 不显示源代码!
  • Microsoft C 运行时不是开源的,但这里是 GNU C 运行时的数学头实现:sourceware.org/git/…
  • 大部分都安装在我提到的目录中。显然不是全部。
  • 微软从英特尔购买了它,但无法获得重新分发源代码的权利。

标签: c visual-studio visual-c++ msvcrt


【解决方案1】:

它在 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
    :   :   :

【讨论】:

  • 感谢您的回答,但我正在寻找源代码,而不是编译后的代码。
【解决方案2】:

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

【讨论】:

  • 感谢您的回答,但我正在寻找源代码,而不是编译后的代码
  • @Serge-appTranslator 愚蠢的问题:你安装了 CRT 源吗?
猜你喜欢
  • 2021-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2021-04-29
相关资源
最近更新 更多