草庐IT

shared_lib

全部标签

c++ - 是否可以创建一个静态库(单个 .lib 文件),稍后可以使用/MT、/MTd、/MD 或/MDd 进行编译?

我不想创建4个不同的库(一个用于MT,MTd,MD,MDd),而是想创建一个未指定其对C运行时库(CRT)的依赖性的库。我尝试将“/c/Zl”选项传递给vc10编译器,然后将/NODEFAULTLIB传递给lib命令。稍后当我使用这样的库时,当我使用不同于默认/MT的开关编译我的程序时,我仍然有错误。例如/MD这里有几个第一个错误:msvcprt.lib(MSVCP100.dll):errorLNK2005:"public:classstd::basic_ostream>&__thiscallstd::basic_ostream>::operator>&(__cdecl*)(class

c++ - 使用 Angus Johnsons 的 Clipper lib 中的 OffsetPolygon 时多边形中的奇数 "notches"

此代码的最终目标是确保客户定义的形状实际上可以由我们的……呃,机器加工。为此,我们将指定的形状向内偏移钻头的半径,然后向外退回相同的量,从而将任何太细而无法实际装入钻头的部分四舍五入。对于多边形偏移,我们使用AngusJohnson的Clipper库,版本5.1.6(c++)。但是从图片中可以看出,这会产生一些意想不到的形状。在图片中,我使用ClipperLib::OffsetPolygon通过-radius偏移原始形状(绿色,大部分被后来的绘图覆盖)以获得黄色形状,然后通过半径偏移以获得红色形状.理论上,对于链接中所示的情况,这应该会导致红色形状与绿色形状完全匹配。导致上述结果发生的

c++ - 是什么导致 VS2013 错误 LNK2005 : __xi_a already defined in MSVCRT. lib(cinitexe.obj)?

我的解决方案是昨天构建的。今天,除了.hpp和.cpp文件外,它没有改变任何东西。VisualStudio2013的完整错误文本(使用2013年11月CTP):Error1errorLNK2005:__xi_aalreadydefinedinMSVCRT.lib(cinitexe.obj)C:\Users\drtwox\dev\repos\game\trunk\engine\game\LIBCMT.lib(crt0init.obj)gameError2errorLNK2005:__xi_zalreadydefinedinMSVCRT.lib(cinitexe.obj)C:\Users\

c++ - 这是带有 shared_ptr 的正确 C++11 双重检查锁定版本吗?

这articleJeffPreshing指出双重检查锁定模式(DCLP)在C++11中得到修复。用于此模式的经典示例是单例模式,但我碰巧有一个不同的用例,而且我仍然缺乏处理“原子武器”的经验-也许这里有人可以帮助我。Jeff在"UsingC++11SequentiallyConsistentAtomics"下描述的以下代码是否是正确的DCLP实现??classFoo{std::shared_ptrdata;std::mutexmutex;voiddetach(){if(data.use_count()>1){std::lock_guardlock{mutex};if(data.use_

c++ - 是否有任何静态分析工具可以帮助检测 shared_ptr<> 循环引用?

是否有任何静态分析工具可以帮助检测shared_ptr循环引用?即使这样的工具不能检测复杂的情况,它对于消除简单的情况仍然有用。 最佳答案 不知道是否存在此类工具,但是hereare关于这个问题的好想法:Thekeytoeffectiveobjectlifetimemanagementistohaveanacyclicobjectownershipgraph.Thenyouusesharedpointerswhengoingdown,weakpointerswhengoingsideways,andweakpointers(orso

c++ - 为什么 C++ Boost 发行版有 `.dll` 和 `.lib` 文件?

大家好。我目前正在创建一个“共享”库(在Windows上也称为DLL),该库又将依赖“BoostC++”库来提供日期时间功能。我注意到我的Boost安装(通过Boostpro完成)在boost安装的lib目录中有一些DLL和LIB文件。好的,我认为这是必需的,所以我将它们添加到我的IDE中的库依赖项中。现在我要做的是编写使用boost日期时间库的代码,创建共享库并从独立的可执行文件中使用它。它有效,即使我刚刚将我创建的共享库复制到可执行文件夹而不是boost_date_time-vc100-mt-1_47.dll文件。奇怪的。现在我要做的是从我的项目中删除Boost的DLL/库依赖项并

c++ - 有一个 weak_ptr 的 vector ,想要返回一个 shared_ptr 的 vector

我目前正在做一个大项目,我需要使用weak_ptr而不是shared_ptr.这是我的问题。我有一个名为House的类,其属性为:vector>my_people.我想修改这个数据成员为vector>my_people.我的setter/getter是vector>&getPeople()const{returnmy_people;}通常,使用简单的weak_ptr我可以回my_people.lock();但是我有一个vector,但我不知道如何做这样的事情:vector>&getPeople()const{for(vector::iteratorit=my_people.begin(

c++ - 使用 std::shared_ptr<std::vector> 而不是 boost::shared_array 有意义吗?

现在我正在重写部分代码以使用C++11标准。在某些地方我发现了以下代码:boost::shared_arrayarray;是否可以将其替换为:std::shared_ptr>array;我正在尝试在我的代码中替换C++11中已经存在的所有boost功能。我需要澄清一点。实际上我需要一个原始数组(但有引用计数,所以它可以自动删除),不需要所有那些vector特征。所以boost::shared_array解决了我想要的问题,没有任何额外的成本。但我试图让我的代码尽可能多地使用新标准(尽管新标准仍未涵盖来自boost的许多库)。谢谢。 最佳答案

c++ - 将 boost::shared_ptr 与重载下标运算符 ([]) 的类一起使用

我有一个重载下标运算符的类:classSomeClass{public:int&operator[](constintidx){returnsomeArray[idx];}private:intsomeArray[10];};这当然允许我像这样访问someArray成员的数组元素:SomeClassc;intx=c[0];然而,一些SomeClass的实例将被包裹在一个boost共享指针中:boost::shared_ptrp(newSomeClass);但是,为了使用下标运算符,我必须使用更冗长的语法,这种语法破坏了下标运算符重载的简洁性:intx=p->operator[](0);

编译gcc踩坑记录——libtool: error: ‘/usr/local/lib/libgmp.la‘ is not a valid libtool archive

安装gcc依赖过程中出现错误,解决方法在google找到的。三个依赖如下:libgmplibmpfr依赖libgmplibmpc依赖libgmp、libmpfr直接就无脑(网上很多教程,这里就不赘述了)./configure--prefix=/home/xx/make&&makeinstall然后在libmpc时候就报错了:libtool:error:'/usr/local/lib/libgmp.la'isnotavalidlibtoolarchive解决方法:因为libmpc引用了libmpfr,libmpfr引用了libgmp而libgmp.la这个文件有bug,编译脚本里libtool路