草庐IT

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

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

c++ - 在 D 中调用动态库和静态库中的 C/C++ 函数

我无法思考如何在D中与C/C++库(包括静态(.lib/.a)和动态(.dll/.so))交互。据我了解,这是可能的告诉DMD编译器与.lib文件链接,并且您可以使用DigitalMars提供的implib工具将.dll文件转换为.lib。另外,我遇​​到了thispage,这意味着能够通过将C头文件转换为D接口(interface)文件来调用.dll中的函数。这两种方法是否等效?这些相同的方法是否适用于Unix库文件?此外,如何从这些库中引用函数、枚举等,以及如何告诉他们的D编译器与这些库链接(我正在使用VisualD,特别是)?如果有人可以提供一些从D代码引用.lib、.dll、.

c++ - 从静态链接的 C++ 库中抛出异常是不安全的?

我听说在C++库中或从C++库中抛出异常可能存在潜在危险,尤其是对于DLL,尤其是如果调用代码和库是使用不同的编译器编译的。有没有道理呢?只要我坚持使用静态库就安全吗?请注意,我不仅在谈论库中异常的内部使用,我还想将它们深入到调用代码中:)澄清一下:假设我有一个编译后的静态库,它定义了类Foo,如下所示:classFoo{public://ConstructorFoo(){/*...Dostuff...*/if(stuffwentwrong)throw(123);//Wethrowanintegererrorcode(tomakeitsimple)}};有人这样用它:try{Foofo

c++ - 是否有从代码库中删除第三方 C 和 C++ 库的好技巧或工具? (OS X 或 Linux)

我正在减少和隔离我对某些库的使用。我编写的许多现有程序直接使用这些库。我想要编译器(在这种情况下是GCC和/或Clang)或一些工具来帮助我在我的代码库中识别这些用途。简而言之,我想在整个代码库中毒害这些库的使用,除了它们将由一个库使用,并且一个库将对我的代码库中的其他模块可见。问题:1)你知道可以帮助我解决这个问题的工具吗?2)或者你能推荐一些策略来使这个过程更容易吗?条件和详情:删除它们的包含不是一种选择。由于我的代码库的大小和我想要隔离的符号数量,搜索无效。考虑到代码库的复杂性和要删除的符号数量,使用重构工具将过于乏味。由于第三方库中声明的数量,单独弃用符号不是一种选择。第三方库

c++ - 如何在 R 包之间共享基于 Rcpp 的库中的 C++ 函数?

我正在用Rcpp开发一个简单的库来构建霍夫曼树。它有一个工作的R接口(interface),我可以从其他包调用,但我也想直接从我正在开发的其他基于Rcpp的包中的C++代码调用C++函数。我已经想出如何将第一个包的header放在inst/include目录中,以便它在第二个包中可用。但是,当在第二个包的NAMESPACE文件中调用useDynLib以加载调用第一个包中的函数的C++代码时,我得到函数的undefinedsymbol错误I我正在尝试使用。我在Import、Depends和LinkingTo下的第二个包的DESCRIPTION文件中列出了第一个包。这是我第一次尝试做任何基

C++:实例化库中的许多模板

我有一个库,其中有一个模板化的类:foo.hpp:templatestructFoo{voidbar();};foo.cpp:templatevoidFoo::bar(){...};我希望针对将在cpp文件中定义的特定大小列表实例化编译版本。在伪代码中,像这样的东西foo.cpp:templatevoidFoo::bar(){...};for(constauto&size:{1,2,7,9})templatestructFoo;现在,我正在手动执行此操作(为每种类型实例化),但这很容易出错,因为我有几个文件应该定义为相同的大小。我知道我可以将所有内容移至头文件,并使用一些enable_

c++ - 过剩库中缺少 glutInitContextVersion()

我正在练习一些opengl代码,但是当我想通过glutInitContextVersion()强制opengl上下文使用特定版本的opengl时,编译过程失败并显示此消息:-useofundeclaredidentifier'glutInitContextVersion'我想解决这个问题,所以我的代码尽可能简单代码#include"File.h"#include#includeusingnamespacestd;intmain(){glutInitContextVersion(3,2);return1;}但是我能够使用其他glut函数而没有任何错误或警告消息我在装有OSX10.9.1的

C ++函数地址在附件的Profiler库中与主题代码库不同

我已经在C++中编写了一个仪器-ER,以通过连接Enter和退出呼叫来记录输入和退出功能。它正按照旧代码基础的方式工作。但是,在与我从git下载的项目相连,我保存在主题代码中的外部变量中的函数地址,它们在Profiler库中的出现不同。这弄乱了挂钩和保存功能之间的功能指针比较。函数地址在主题代码主文件中,断点位于当前的perter钩函数中相同的条目是在函数名称之前的“_”显示不同的地址,在ProfilerCode中我不知道它是如何更改地址的,想知道我是否做错了什么。我这样做的方式是,我有一个外部功能指针(及其名称),该指针在主题主文件中使用主题代码函数的引用初始化(其中所有功能都可用)。在库的

c++ - 在 Mac OS X 上以多态方式捕获 -fno-rtti 共享库中的异常

我正在使用f-no-rtti构建一个共享库。在内部,此库抛出std:invalid_argument并捕获std::exception,但从未输入catch子句。以下代码重现了该问题(g++4.2、MacOSX10.6)://library.cpp:exportsf(),compiledwith-fno-rtti#include#includeextern"C"{voidf(){try{throwstd::invalid_argument("std::exceptionhandler");}catch(std::exception&e){std::cout//main.cpp:them

c++ - POCO Net C++ 库中的代理身份验证

我已经使用PocoNet库一段时间了,它非常好。非常方便且易于理解。我能够设置一个代理地址,它正确地显示需要407代理授权。我认为HTTPRequestreq(HTTPRequest::HTTP_GET,path,HTTPMessage::HTTP_1_1);req.setCredentials(scheme,authInfo);我在scheme中尝试了“basic”、“plaintext”等值,在authInfo中尝试了“user:password”。它似乎不起作用。Google没有帮助。以前有人用PocoNet做过吗?还是用法很明显,并且由于我对代理身份验证的无知而无法使其正常工作