小编ned*_*res的帖子

C - 有一个简单的循环来进行算术运算; 分析器显示这是一个瓶颈.如何加快速度?

我在这里的第一篇文章 一个伟大的网站和资源.

我做了一点搜索并查看了类似标题的问题,但找不到具体的相关内容.

我正试图从我的C++程序使用的C天文计算库中删除任何冗余和膨胀.我跑了一个简单的探查器(VerySleepy).

以下是探查器使用最多时间显示的代码(除了C库函数sprintf等):

double swi_echeb(const double x, const double* const coef, const int ncf)
{
    int j = ncf - 1;
    double x2, br, brp2, brpp;
    x2 = x * 2.;
    br = 0.;
    brp2 = 0.;  /* dummy assign to silence gcc warning */
    brpp = 0.;

    for (; j >= 0; --j) {                 // <-- 0.39s
        brp2 = brpp;                      // <-- 0.01s
        brpp = br;                        // <-- 0.32s
        br = x2 * brpp - brp2 + …
Run Code Online (Sandbox Code Playgroud)

c math optimization performance loops

18
推荐指数
3
解决办法
1647
查看次数

链接器读取库但在其中找不到符号?未解析的外部符号,但仅适用于Win32而不适用于x64

背景

我有一个C天文库,我想在我的C++应用程序中使用.

我在Win32x64配置中使用Visual Studio 2012 Express构建它,并且:

  • 动态调试(.dll)
  • 动态发布(.dll)
  • 静态调试(.lib)
  • 静态释放(.lib)

...所以这是2*4 = 8个二进制文件(不包括*.pdb文件等)

然后我使用Batch Build来构建所有配置,因为有时我需要不同的版本,并且我发现在开始时完成这一切并且当一个过程很容易混合时,一个过程比偶然更好.

在我的C++应用程序中,我有相同的过程,并根据名称链接到库.具体来说,在我的项目属性链接器 - >输入字段中,我有:

SwissEphemeris_$(Platform)_$(Configuration).lib
Run Code Online (Sandbox Code Playgroud)

...并且正确设置了附加库目录.一切似乎都是对的.库文件位于库目录中.

这是麻烦:

在我拥有的8种配置中,除了两个外,所有配置都正确连接和构建:

  1. Win32动态调试
  2. Win32动态发布

对于这两种配置,相同的链接器错误:

main.obj : error LNK2019: unresolved external symbol _swe_close referenced in function _main
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些诊断或修复的东西,但没有一个有效:

  1. 在新的解决方案/项目中从头开始重建库,确保Win32x64之间没有/MACHINE链接器标志之外的偏差
  2. 创建一个新的解决方案/项目,只有一个main()swe_close()在Win32动态调试配置中调用这个库函数并链接到*.lib.

错误始终相同,如上所示.我已经打开了冗长的链接器输出,真正让我感到困惑的是链接器似乎成功找到并读取了SwissEphemeris_Win32_DynamicDebug.lib文件,但仍无法swe_close()在其中找到符号.即使dumpbin.exe表明符号,在我需要的所有其他符号中,也在其中.

1>  Unused libraries:
1>    E:\Data\Code\lib\SwissEphemeris\SwissEphemeris_Win32_DynamicDebug.lib
1>    C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\user32.lib
1>    C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86\gdi32.lib
1>    C:\Program …
Run Code Online (Sandbox Code Playgroud)

c++ dll unresolved-external visual-studio-2012

5
推荐指数
1
解决办法
1万
查看次数