草庐IT

c++ - 可移植 VFS 库 C++

有没有人遇到过满足这些要求的优秀文件系统虚拟化库?跨平台:至少是Win32和Linux,最好是OSX支持协议(protocol):中小企业FTPSFTP本地FS基于URL与客户端工厂的抽象C++接口(interface):smb://[用户[:密码]@]主机/共享/路径...ftp://[用户[:密码]@]主机/路径...sftp://[用户[:密码]@]主机/路径...文件://路径...提供以下方法:列出目录,最好返回具有类似structstat属性的条目移动复制删除数据奖励:低级文件访问接口(interface)(打开、读取、写入、关闭...)我见过一些满足这些要求的子集的好库(

c++ - 尽管有增量链接,但 Exe 在库更改时执行完整链接

我有一个MSVC++项目,由一个可执行文件、几个自己的静态库和一些预编译的静态第三方库组成。该exe使用增量链接以加快构建时间。当我在可执行项目中更改.cpp文件时,编译+链接非常快(但是,当我在我自己的一个库中更改.cpp文件时,可执行项目似乎正在对其使用的每个库执行完整链接。我不太确定它实际上是否是一个完整链接,但从“找不到vc90.pdb”链接器警告,我可以看出它链接到一些根本没有改变的外部库。这是项目结构的示例:预编译的第三方库ExtLib1、ExtLib2和ExtLib3自己的库MyLib,使用第三方库ExtLib1自己的ExeMyExe,使用MyLib和ExtLib1-3更

c++ - 使用共享库公开类型安全的动态 API

我正在为应用程序编写插件API接口(interface)。插件在运行时作为共享库加载。他们可以通过如下接口(interface)访问应用程序API:classIPluginAPI{public:virtualboolIsPluginsLoaded(void)=0;virtualboolIsHookingEnabled(void)=0;//Andabout50moremethods};插件可以请求“监听”某些事件(例如MouseClick、MouseScroll等)。这些功能总共构成了>300个不同的事件。通常我会做这样的事情:extern"C"voidSetEventHooks(API

c++ - 如何在 C/C++ 中将字符串从 UTF8 转换为 Latin1?

我的问题很简单,但我至今找不到解决方案:如何在C++中将UTF8编码的string转换为latin1编码的string而无需使用任何额外的库(如libiconv)?到目前为止我能找到的每个示例都是针对latin1到UTF8的转换? 最佳答案 typedefunsignedvalue_type;templatesize_tget_length(Iteratorp){unsignedcharc=static_cast(*p);if(cvalue_typeget_value(Iteratorp){size_tlen=get_length(

c++ - gcc 是否有 pragma 来定义文件类型/编译器?

GCC根据文件扩展名(.c、.cc)、命令行参数(-x)或直接调用适当的编译器(比如g++而不是gcc)自动在编译器之间切换。有什么方法可以在文件中使用pragma来覆盖这些吗?评论后更新:我正在将当前50/50C和C++的代码库转换为完全使用C++编译器编译。这是为了允许当前的“C”模块调用我无法更改(并且不想包装)的新C++基础。对于真正是C的文件,我想将扩展名保留为.c,即使它们现在具有C++链接。我认为将它们保留为“.c”表明它们为何如此(我在这里考虑后代!;-))但是更改构建系统以适应每个更改的C文件名也是一项艰巨的工作。更糟糕的是,C文件的一小部分不会正常地转换为C++,所

c++ - 如何处理 Visual Studio 中的第 3 方 C++ 库 LNK4099 警告

我有一个使用链接器设置的VisualStudioc++项目/WX(TreatWarningsAsLinkerErrors=true)在调试中,我使用/Zi(调试数据库)进行编译,效果很好。现在我有一个带有静态库的第3方SDK,但没有.pdb文件。只要我在调试中链接这个文件,我就会得到LNK4099:3rd-party.lib(3rd-party.obj):warningLNK4099:PDB"vc90.pdb"wasnotfound"3rd-party.lib(3rd-party.obj)"orwith"C:\OutDir\vc90.pdb"请注意,此消息具有误导性,因为将vc90.p

c++ - 有选择地禁用第三方库的 C++ Core Guidelines Checker

我想尝试使用CoreGuidelinescheckertool在VS2015下的C++11/14项目上。在我的代码中,我使用了很多来自Boost的库,它们触发了很多警告。我不关心这些警告,因为Boost正在做很多非常聪明的工作,并且编写库的目的不是为了符合指南,它们大多早于指南。但是面对如此多的警告,我无法在我的代码中找出真正的问题(至少根据工具)。有没有办法抑制第三方代码的所有警告?也许#includingboostheaders前后有一些属性?我已阅读thispage来自VisualC++团队博客,但我找不到它。 最佳答案 有一

c++ - 在 C++ 中动态创建函数调用

大家好我希望你们能帮我解决这个问题:我目前正在为一种脚本语言实现解释器。该语言需要一个对C函数的本地调用接口(interface),就像java具有JNI一样。我的问题是,我想在不编写包装函数的情况下调用原始C函数,它将我的脚本语言的调用堆栈转换为C调用堆栈。这意味着,我需要一种方法来在运行时生成C函数的参数列表。示例:voida(inta,intb){printf("functionacalled%d",a+b);}voidb(doublea,intb,doublec){printf("functionbcalled%f",a*b+c);}interpreter.registerNa

c++ - Qt 构建发布和调试库

我需要在没有GUI的Redhat后端机器上安装QtSDK。(亚马逊EC2)。当我尝试安装时,由于无法连接显示器而失败。然后我尝试下载源代码并编译。如果我使用configure-debug,它只会编译调试库。与仅当我指定-release时它才编译和安装发布二进制文件相同。同样在我的*.pro文件中,它链接了最后安装的版本,而不考虑CONFIG+=debug或CONFIG+=release我需要两种格式。libQt5Core.so和libQt5Core.d.so。并且需要根据CONFIG链接单独的库。 最佳答案 我这样做解决了问题。首先

c++ - Try-catch 在共享库中不起作用?

(这类似于myotherquestion但这是另一回事,即使它是相关的)我的项目中遇到了一个大问题。我有一个处理XML并可以抛出异常的库。并且,使用它来创建配置文件类显示了我的第一个错误:库中根本没有处理异常,每个异常都没有处理。在我写的库中:try{throwstd::exception();}catch(...){printf("caught\n");}但是,异常没有被处理并立即调用std::terminate:terminatecalledafterthrowinganinstanceof'std::exception'what():std::exception编译标志是最简单的