草庐IT

static-libraries

全部标签

C++ 删除 static_cast<void*> (指针)行为

假设代码执行以下操作:T*pointer=newT();deletestatic_cast(pointer);结果是什么?未定义,内存泄漏,内存被删除? 最佳答案 行为未定义。关于delete表达式,C++标准说:Inthefirstalternative(deleteobject),ifthestatictypeoftheoperandisdifferentfromitsdynamictype,thestatictypeshallbeabaseclassoftheoperand’sdynamictypeandthestaticty

c++ - Visual Studio : How to specify different runtime libraries for the linker?(/MTd、MDd 等)

我正在链接到VS2008中的几个库。如果我对链接器的了解是正确的,MTd用于静态链接而MDd用于动态链接(到DLL)。我的目标是静态链接一些库和动态链接其他库。项目选项似乎只有一个设置适用于链接器输入中的所有库。我该怎么做? 最佳答案 在您设置项目后,您的项目将获得一个合理的C运行时库默认值,具体取决于您如何回答新建项目向导的提示。您可以按如下方式检查和更改(如果需要):在解决方案资源管理器中右键单击相关项目,选择属性查看配置属性、C/C++、代码生成、运行时库。您可以根据需要链接其他库,您只需在“链接器”、“输入”、“附加依赖项”

c++ - OpenSSL 静态库太大,有什么替代方法或方法可以减小它的大小吗?

我使用了OpenSSL1.0的预构建静态库,但它使我的二进制文件太大(在Release模式下将其大小增加了大约800Kb)。我不需要OpenSSL的大部分功能,例如BIO,我使用自己的套接字,因此在代码中我只使用了几个SSL_XXXXXXXXX调用(SSL_accept(3)或SSL_connect(3)、SSL_read(3)和SSL_write(3))我唯一的要求是支持SSLv2/v3在windows上使用winsock,在linux上支持客户端和服务器端的套接字(对于C++)有没有办法让OpenSSL变得更小(也许通过自己编译),或者,在最后的手段中,有任何其他好的但更轻量级的S

c++ - 关于C/C++静态库的推理

我从来没有想过下面的问题,但由于我现在不得不处理我的代码中的一堆依赖关系,我想我最好弄清楚我的事实。让我们将其限制为现代Linux版本,例如ubuntuamd64。由于静态库不包含动态库引用,undefinedsymbol如何在静态库中解决?依赖二进制文件是否可以动态加载undefinedsymbol,或者这些符号必须在编译时由另一个静态库或目标文件解析?编译器是否可以通过链接动态库来解析(依赖于静态库的应用程序的)依赖关系,如果是这样,代码文本是否会静态解析为生成的二进制文件,或者是否存在动态引用?例如,静态库L使用libc6.so中的malloc,它将被应用程序A使用>。L和A都会

c++ - 关于static_cast的问题

我写了一段代码,但我对它的输出感到困惑:#includeusingnamespacestd;classB{public:virtualvoidfoo(){cout(pb);pd1->foo();pd1->disp();}intmain(intargc,char*argv[]){B*pb=newB();func(pb);return0;}输出是:B::fooD::disp但是据我所知,pb指向类型B。而且里面没有名为disp()的函数?那么,为什么它可以访问D类中的disp()函数? 最佳答案 因为disp()不访问类的任何成员,原则

c++ - 为什么编译器中不存在重新链接按钮?

我在Linux中使用c++,使用eclipse。但我也曾与VisualStudio合作过。他们没有(或者至少我不知道该怎么做)重新链接项目的按钮。例子:我有一个大项目(1),有数百cpp。该项目使用小型库(2)来执行foo。如果我改变foo的行为,并编译它,生成一个库,我需要清理大项目(1),重新编译,链接外部库(2)和工作。问题是大项目没有变化,但是有几百个cpps,它的编译时间大约是5分钟。5分钟是第二个库中的一个小变化。有没有可能避免这个问题?提前致谢 最佳答案 我怀疑,但这只是一个猜测,您的项目在您的foo库和项目中的其他可

c++ - 对模板中的所有其他类型执行 static_assert

如何对模板中的所有其他类型执行static_assert(或其他检查)?template//T1,T2,T3,...structfoo{//HowcanI//forT1,T3,T5,T7,...//dosomechecks,forexample://static_assert(std::is_default_constructible::value,"invalidtype");//static_assert(std::is_copy_constructible::value,"invalidtype");}; 最佳答案 请试试这个

c++ - std::static_pointer_cast 是否有任何额外的运行时开销?

相对于static_cast,即。所以,如果我们有这两个类型转换Base*b(newDerived());Derived*d=static_cast(b);//(1)shared_ptrb(newDerived());shared_ptrd=static_pointer_cast(b);//(2)第(2)行会比第(1)行慢吗? 最佳答案 是的,它有更多的开销,因为它必须返回一个新的shared_ptr而不是一个新的原始指针。boost实现是:templateshared_ptrstatic_pointer_cast(shared_p

c++ - 依赖于另一个库的库上的 CMake 和 target_link_libraries

我正在使用CMake构建不同的C++库,整个事情可以总结如下:liba:不依赖于任何东西libb:依赖于a我现在需要创建一个依赖于b的库c。我只需要在b上链接c吗?或者在b和a上,因为b依赖于a?target_link_libraries(cb)还是target_link_libraries(cba)?谢谢 最佳答案 在你的代码构建库b中,你应该告诉CMakeb依赖于a:target_link_libraries(ba)然后,您的库/应用程序c可以仅链接到它使用的内容,而不必担心依赖项的依赖关系:target_link_librar

c++ - Static Cast 访问静态 const 类成员

这个问题在这里已经有了答案:Undefinedreferencetostaticconstint(9个回答)关闭5年前。所以昨天我正在寻找SO,但找不到以下问题的答案。这种情况来self正在使用的一些代码,但这里是MCVE来演示它。我在A.h中定义了一个类A,其中只有一个静态常量。我已经在标题中对其进行了初始化。#ifndefA_H_#defineA_H_classA{public:staticconstinttest=5;~A(){};};#endif/*A_H_*/然后我有一个B类需要从A类访问publicstaticconst。在这个例子中,它将把值深度复制到一个vector中。