草庐IT

static-libraries

全部标签

c++ - 如何在运行时摆脱 LD_LIBRARY_PATH?

我正在构建一个使用英特尔IPP的C++应用程序图书馆。该库默认安装在/opt中,需要您设置LD_LIBRARY_PATH来编译和运行您的软件(如果您选择共享库链接,我就是这么做的)。我已经修改了我的configure.ac/Makefile.am这样我在编译时就不需要设置那个变量了,但是我在运行时仍然找不到共享库-时间;我该怎么做?我正在使用g++使用-Wl,-R/path/to/libdir标记进行编译更新1:实际上我的二进制程序有一些正确链接的IPP库,但只有一个不是:$lddmyprogramlinux-vdso.so.1=>(0x00007fffa93ff000)libippa

c++ - constexpr std::array with static_assert

#include#includeintmain(intargc,char**argv){constexprconststd::arrayarr{{0,1}};constexprconstintarr2[]={0,1};static_assert(arr[0]==arr2[0],"asdf");static_assert(arr[1]==arr2[1],"asdfasdf");return0;}当使用gcc4.8.2和4.9.1使用g++test.cpp--std=c++11编译时,编译成功。但是,当使用clang++test.cpp--std=c++11使用clang3.4和3.5编译

c++ - 为什么我应该更喜欢类中的 static constexpr int 而不是类级整数常量的枚举?

C++17更新:staticconstexpr变量是隐式内联,因此不需要外部定义。原始问题:假设我有一个常量列表,例如structCls{staticconstexprintN=32;staticconstexprintM=64;};这当然建议我为这些添加定义以避免可能发生的ODR使用问题,因此我需要:constexprintCls::N;constexprintCls::M;为什么应该我更喜欢这个structCls{enum:int{N=32,M=64};};这让我免于ODR使用的麻烦,因为N和M更真实地只是常量,而不是对象本身(如果这是标题,那就更重要了-only)并且更短。我可以

c++ - 依赖于其他 slib 的静态库是否需要它们的实际 'code' 才能工作?

抱歉问题标题模糊,我只是想确定一些事情。静态库不与其他静态库链接,对吗?所以当我写一个slib:A,它使用另一个:B的功能时,我必须提供的只是B到A的header,而且只有那些,即使A实际上使用了B的功能?是吗?只要使用A的exe:X,有没有指定B.lib作为链接器输入?因此在链接时,链接器采用A.lib,它基本上只知道B的函数在其代码中的某处被调用,并以某种方式从B.lib中填充该信息,使A.lib成为“完整的”,在X与它现在工作的部分链接之前?这些问题背后的动机是摆脱一些链接器警告4006和丢弃的双重定义,我认为这应该可以解决问题,如果这实际上是一种有效的方法的话。

c++ - static_cast 到相同类型会引入运行时开销吗?

我有一个结构模板,它采用两种类型(T和S),并且在某些时候使用static_cast从一种类型转换键入另一个。通常情况下,T和S是同一类型。设置的简化示例:templatestructfoo{voidbar(Tval){/*...*/some_other_function(static_cast(val));/*...*/}};在S与T是同一个类的情况下,static_cast是否会引入额外的开销,或者它是否为null哪个操作总是会被忽略?如果它确实引入了开销,是否有一个简单的模板元编程技巧来仅在需要时执行static_cast,或者我是否需要创建部分特化来处理T==S案例?如果可能,

c++ - VC2010 的 static init 线程安全吗?

我一直在SO和MSDN周围寻找这个问题的答案,但似乎找不到明确和最终的答案......我知道它在C++11标准中并且当前的GCC版本以这种方式运行,但是VC2010目前是否保证局部静态变量初始化的线程安全?即:这对于VC2010是线程安全的吗?staticS&getInstance(){staticSinstance;returninstance;}...如果不是,当前使用VC2010在C++中实现线程安全单例的最佳实践是什么?编辑:正如ChrisBetti的回答所指出的,VC2010没有实现局部静态变量init的线程安全。 最佳答案

c++ - 具有多个参数的 boost::static_visitor

typedefboost::variantType;classAppend:publicboost::static_visitor{public:voidoperator()(int){}voidoperator()(double){}};Typetype(1.2);Visitorvisitor;boost::apply_visitor(visitor,type);是否可以更改访问者,使其接收如下额外数据:classAppend:publicboost::static_visitor{public:voidoperator()(int,conststd::string&){}voido

c++ - Boost Graph Library 中的顶点描述符和索引有什么区别?

在Boost图形库中,什么时候应该使用顶点描述符,什么时候使用索引?由于vertex_descriptor的实现实际上是无符号整数,那么这两个东西是否具有相同的值? 最佳答案 vertex_descriptor仅在您使用vector(或类似的)作为顶点的基础数据结构(即boost::vecS)时作为索引。如果您使用不同的底层数据结构,则顶点描述符不一定是索引。例如,如果您使用std::list/boost::listS-列表不使用基于索引的访问方法。相反,每个vertex_descriptor将改为指向列表项的指针。因此,每次你想在

c++ - 是否有可能 static_assert lambda 不是通用的?

我实现了一个Visit函数(在变体上),它检查变体中当前事件的类型是否与函数签名(更准确地说是第一个参数)匹配。基于这个不错answer.例如#include#include#includetemplateArgfirst_argument_helper(Ret(*)(Arg,Rest...));templateArgfirst_argument_helper(Ret(F::*)(Arg,Rest...));templateArgfirst_argument_helper(Ret(F::*)(Arg,Rest...)const);templatedecltype(first_argum

c++ - static_cast 可以在 C++ 中抛出异常吗?

假设static_cast永远不会抛出异常是否安全?对于int到Enum的转换,即使无效也不会抛出异常。我可以依赖这种行为吗?以下代码有效。enumanimal{CAT=1,DOG=2};inty=10;animalx=static_cast(y); 最佳答案 对于这种特定类型的转换(枚举类型的组成部分),可能会抛出异常。C++standard5.2.9Staticcast[expr.static.cast]paragraph7Avalueofintegralorenumerationtypecanbeexplicitlyconve