草庐IT

lib_case

全部标签

c++ - 从 MinGW .a 转换为 VC++ .lib

我有一个旧库(用C++编写),我只能在Windows上的MinGW+MSYS32上构建它。由此我可以生成一个从GNUlibtool生成的.a静态库文件。我的主要开发是在VisualStudio2008中完成的。如果我尝试使用MinGW生成的库并将其链接到VisualStudio中,它会提示缺少外部组件。这很可能是由于已完成的C++符号重整,并且它与.a文件中的内容不匹配。有什么已知的方法可以将静态.a文件转换为VC++库格式吗? 最佳答案 如果符号被不同地破坏,编译器正在使用不同的ABI,你将无法“转换”或任何编译的库:名称以不同方

c++ - switch case 是循环还是条件结构?

我在一次采访中被问到这个问题。我回答说这是一个条件结构,因为它只执行一次,不像循环可以执行多次。没有循环控制机制,只有根据不同情况进行条件切换。那么我的回答是对还是错,还有更好的答案吗?他还问我为什么break;语句适用于switch-case,因为break;只适用于循环。这个问题我没法回答。 最佳答案 在C++中switch是selection-statementn33766.4/1和6.4.2是关于switchselection-statement:...switch(condition)statementbreak是跳转语句

c++ - 分析 DLL/LIB 膨胀

我在VS2005中继承了一个相当大的C++项目,它编译成一个大约5MB的DLL。我想缩减库的大小,以便从慢速网络共享中使用它的客户端可以更快地通过网络加载它。我知道如何通过分析代码、包含和项目设置来做到这一点,但我想知道是否有可用的工具可以更轻松地查明代码的哪些部分占用的空间最多。有没有办法生成DLL布局的“配置文件”?关于库图像中什么正在消耗空间以及占用多少空间的报告? 最佳答案 构建DLL时,可以传递/MAP给链接器让它生成一个映射文件,其中包含结果图像中所有符号的地址。您可能需要编写一些脚本来计算每个符号的大小。使用"stri

c++ - 在 switch case 语句中,它表示 "duplicate case value"作为错误出现。有人知道为什么吗?

我正在编写剪刀石头布程序,但这次计算机有一半的时间选择石头,三分之一的时间选择剪刀,只有六分之一的时间选择布。我这样做的方法是列举了六个可能的计算机选择值:enumchoicec{rock1,rock2,rock3,scissors1,scissors2,paper};choiceccomputer;但是,在计算机做出选择之后,我必须将这些枚举值转换为石头、布或剪刀。我使用switch-case语句完成了此操作:switch(computer){caserock1||rock2||rock3:c=1;break;casescissors1||scissors2://ERROR!c=3;

c++ - 为什么我不能在 switch/case 中使用 unsigned short?

我在ClsA中有两个静态成员声明,​​如下所示:classClsA{public:staticunsignedshortm_var1;staticunsignedshortm_var2;};unsignedshortClsA::m_var1=1001;unsignedshortClsA::m_var2=1002;在ClsB中,我像这样使用来自ClsA的静态成员声明:unsignedshortvar1;//assumevar1isdeclare/usesomewhereinthecode.switch(var1){caseClsA::m_var1://Error:cannotappear

c++ - 为什么 boost 寻找 libboost_*.lib 而不是 boost_*.lib?

我使用标记布局编译了boost库,因此我有boost_program_options-mt.lib形式的库文件。我假设问题是boost_auto_link之类的。我有预处理器定义BOOST_AUTO_LINK_TAGGED,尽管我仍然收到错误消息说VisualStudio正在寻找libboost版本并且无法打开文件。ErrorLNK1104cannotopenfile'libboost_program_options-mt.lib'我该如何解决这个问题才能正确链接到库?UPDATE:Forsomereason,whenIlaunchmyprogram,Igetanerrorsaying

c++ - boost lib 中的语句,(void)p;这是什么意思?

我在Boost库中看到了以下一段用于offset_ptr的代码。在boost/interprocess/offset_ptr.hpp下typedefPointedType*pointer;...//!Constructorfromotherpointer.//!Neverthrows.templateoffset_ptr(T*ptr){pointerp(ptr);(void)p;this->set_offset(p);}我想知道语句(void)p;是什么意思?是吗? 最佳答案 找出答案的一种方法是在该行代码上打一个断点,然后单步执行

c++ - 如何隔离只允许创建为单例的不良行为 3rd-party c-lib?

目前我正在开发一个原生Cnodejs插件来包装一个3rdparty闭源c-lib并将其暴露给nodejs。到目前为止一切顺利。我的解决方案有效,并且可以调用和使用native代码。当随后调用这些函数时,会出现一个问题。3rdParty库似乎总是为其运行时对象分配相同的结构(?;说:内存中的相同位置)。我能以某种方式“沙盒化”这个3rdparty-lib吗?有解决这个问题的模式吗?可能特定于nodejs-addon开发,因为nodejs是单线程、单进程应用程序。在这种情况下,一般建议似乎在单独的进程中运行3rdParty库,例如此处所述:Isolatingandmultiplyinsta

c++ - Cmake,在/usr/local/include 中找到头文件,在/usr/local/lib 中找到库

我希望CMake找到add_executable的header并找到target_link_libraries的.so文件。我要找的头文件是lcm-cpp.hpp(在ubunthu上)ls/usr/local/include/lcm/eventlog.hlcm_coretypes.hlcm-cpp.hpplcm-cpp-impl.hpplcm.h我项目根目录下的CMakeLists.txt文件cmake_minimum_required(VERSION2.6)project(libFoo)include_directories(include/usr/local/include/lcm

c++ - Catch.hpp 单元测试 : How to dynamically create test cases?

我正在使用CATCHv1.1build14对我的C++代码进行单元测试。作为测试的一部分,我想检查代码中几个模块的输出。没有固定数量的模块;可以随时添加更多模块。但是,测试每个模块的代码是相同的。因此,我认为将测试代码放在for循环中是最理想的。事实上,使用catch.hpp,我已经验证了我可以在测试用例中动态创建部分,其中每个部分对应一个模块。我可以通过将SECTION宏包含在for循环中来做到这一点,例如:#include"catch.hpp"#include#include#include"myHeader.h"TEST_CASE("Moduletesting","[module