草庐IT

c++ - 为什么库实现者使用短名称?

这是一个幼稚的问题,但为什么库中的所有函数和变量名称都这么短?例如在lapack.cpp中一个函数的名字是dgetrs看看这个网站http://www.netlib.org/lapack/explore-html/d6/d49/dgetrs_8f.html所有函数都以相同的简短方式命名。使用更大的名称是否会产生任何性能成本?在我看来,使用短名称会导致很多问题,使代码难以理解。调试变得困难。很多事情都可以通过一个好的函数名来传达,为什么库开发人员放弃了它?我意识到编写库的人比我更有经验,所以我想知道原因。打字变得稍微容易一些,但从长远来看,这不是通过可用性和可维护性来补偿的吗?

c++ - VS2015 无法理解静态内联函数

我在visualstudiomakefile项目的头文件中定义了以下函数,该项目最终使用msys-rtems在c中构建:staticinlineUInt32timer_now(){...其中类型UInt32是来自包含的头文件的typedef:typedefunsignedlongUInt32;由于该功能,我的智能感知出现以下问题:Intellisense建议inline不是类型名称。>错误:变量“inline”不是类型名称Intellisense认为UInt32的定义是这个函数,而不是typedefunsignedlong。如果我删除inline关键字,一切正常(除了我不想这样做,因为

c++ - ldd 显示重复的共享库

我不清楚为什么ldd在找不到依赖项时多次向我显示同一个共享库。在一个使用boost的小可执行文件中,输出是:libboost_chrono.so.1.49.0=>notfoundlibboost_system.so.1.49.0=>notfoundlibboost_system.so.1.49.0=>notfoundlibboost_program_options.so.1.49.0=>notfoundlibboost_regex.so.1.49.0=>notfound否则在安装正确的依赖项后ldd只显示一个:libboost_system.so.1.49.0=>/usr/lib/li

c++ - 使用 gcov 忽略或排除外部库中的代码

我正在从事一个使用几个boost库的项目。在查看我们的测试报告时,我们发现测试覆盖率信息有时确实适合我们的源代码。我能够追踪到boost::range。我认为这是因为库中的一些静态初始化,虽然我不能说更具体的事情。基本上,如果您使用gcc--coverage编译以下代码,运行它并使用gcov-b打印覆盖率报告,将会有四个额外的分支和额外的一行,我想忽略它。#includeintfoo(intx){returnx+1;}intmain(intargc,char*argv[]){returnfoo(argc);}覆盖率报告是:执行的行数:5的100.00%执行的分支:100.00%of4至

c++ - C++ FakeIt 库多重继承

我正在比较GoogleMock与FakeIt编写单元测试的情况。与GoogleMock相比,我更喜欢FakeIt,因为我有Java背景,而且FakeIt与Mockito/JMock语法非常接近,这使得使用该库更容易编写和维护。但是FakeItGIThome(https://github.com/eranpeer/FakeIt)说它不支持MultipleInheritance并且应用程序imtesting具有多重继承的代码。我不必支持菱形继承,所以我想知道是只是多重继承的那个方面不受支持,还是还有其他方面也不受支持? 最佳答案 不幸的

c++ - 有效的 ARM 可执行文件找不到库

我为ARM嵌入式设备(运行DD-WRT的AsusRT-AC68U路由器)交叉编译了一个小的HelloWorld程序:#arm-linux-gnueabi-g++hello.cpp-mcpu=cortex-a9-s-ohello文件看起来不错:#filehellohello:ELF32-bitLSBexecutable,ARM,EABI5version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.32,BuildID[sha1]=5099693c31154cdd7f04c16ced5b80b1e35e625b,stri

c++ - 如何对 WAV 文件数据执行 FFT?

我正在尝试通过检测存在的最高频率来分析文件的音频质量(压缩音频通常会被过滤到低于20KHz的频率)。我正在使用soundstretch库中的一个类读取WAV文件数据,该类将PCM样本作为float返回,然后使用fftw3库对这些样本执行FFT。然后对于每个频率(四舍五入到最接近的KHz),我将计算该频率的振幅。因此对于不包含高于16KHz频率的低质量文件,我希望在16KHz以上没有或只有很小的幅度,但是我没有得到我期望的结果。下面是我的代码:#include#include#include#include#include"include/WavFile.h"usingnamespace

c++ - 两个使用不同 libstdc++ 版本的静态库

我正在开发一个使用旧版本libstdc++的项目。我刚刚介绍了一个静态链接的新库,它需要更新版本的libstdc++。我已经安装了两个版本的libstdc++。有没有办法用gcc和新库编译我的程序? 最佳答案 使用较新版本的libstdc++编译为thislibraryisforwardcompatible. 关于c++-两个使用不同libstdc++版本的静态库,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

c++ - 从 C++ 调用共享库

我有一个共享库,其中存储了一些函数。我想通过从另一个程序调用该库来访问这些功能。我之前在C中做过这个。现在我想用C++做同样的事情。我是C++的新手,非常需要任何建议。顺便说一句,共享库是用C编写的。我是否仍然可以在C++程序中调用它并使用它的所有功能。请帮我。示例程序会非常有用。我使用的是ubuntu14.04,编译器是它自带的原生g++。 最佳答案 使用dlopen加载共享库,并使用dlsym加载给定的符号.与-ldl链接。所以给定一个共享库hello.cpp,编译g++-shared-fPIC-olibhello.sohell

c++ - 在 CMake 构建中更改库依赖项

我正在构建一个依赖于其他静态库的库,为了进行测试,我必须将其中一个库更改为测试版本。对于我的生活,我不知道如何使用CMake做到这一点。我的CMake设置如下所示:add_library(XSTATICx.cpp)add_library(YSTATICy.cpp)add_library(ASTATICa.cpp)target_link_libraries(AXY)add_executable(EXEmain.cpp)target_link_libraries(EXEA)这工作正常,但现在我想创建另一个使用TEST_X而不是X的可执行文件。这是一个简化的示例,但我有一个来自遗留系统的非常