我在这里的第一篇文章 一个伟大的网站和资源.
我做了一点搜索并查看了类似标题的问题,但找不到具体的相关内容.
我正试图从我的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天文库,我想在我的C++应用程序中使用.
我在Win32和x64配置中使用Visual Studio 2012 Express构建它,并且:
...所以这是2*4 = 8个二进制文件(不包括*.pdb文件等)
然后我使用Batch Build来构建所有配置,因为有时我需要不同的版本,并且我发现在开始时完成这一切并且当一个过程很容易混合时,一个过程比偶然更好.
在我的C++应用程序中,我有相同的过程,并根据名称链接到库.具体来说,在我的项目属性链接器 - >输入字段中,我有:
SwissEphemeris_$(Platform)_$(Configuration).lib
Run Code Online (Sandbox Code Playgroud)
...并且正确设置了附加库目录.一切似乎都是对的.库文件位于库目录中.
在我拥有的8种配置中,除了两个外,所有配置都正确连接和构建:
对于这两种配置,相同的链接器错误:
main.obj : error LNK2019: unresolved external symbol _swe_close referenced in function _main
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些诊断或修复的东西,但没有一个有效:
/MACHINE
链接器标志之外的偏差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)