草庐IT

c++ - 编写/使用 C++ 库

我正在寻找以下方面的基本示例/教程:如何用C++编写/编译库(Linux为.so文件,Windows为.dll文件)。如何在其他代码中导入和使用这些库。 最佳答案 代码r.cc:#include"t.h"intmain(){f();return0;}t.h:voidf();t.cc:#include#include"t.h"voidf(){std::cout但是如何,如何,如何?!~$g++-fpic-ct.cc#gett.o~$g++-shared-ot.sot.o#gett.so~$exportLD_LIBRARY_PATH="

c++ - 静态链接到使用不同版本的 C 运行时库构建的库,好还是不好?

考虑这个场景:应用程序链接到第3方库A。A使用MSVC2008构建,并静态链接(即使用/MT构建)到C运行时库v9.0。该应用程序是使用MSVC2005构建的,静态链接到A和(使用/MT)C运行时库v8.0。我可以看到这方面的问题-例如,如果在运行时库版本之间的header中更改了类型。是否注意保持运行时库header在版本之间兼容,或者应该始终确保所有静态链接库都链接到同一版本的运行时库? 最佳答案 应该不是问题。每个库都链接到自己的运行时,并且大部分功能独立于流程中的其他库。当库ABI定义错误时,就会出现问题。如果在一个库中分配

c++ - C/C++。库相对于组合目标文件的优势

虽然将多个目标文件组合到一个库中是司空见惯的事情,但也可以(至少在Linux中)将多个目标文件组合到另一个目标文件中。(参见combinetwoGCCcompiled.oobjectfilesintoathird.ofile)因为使用库而不是仅仅组合目标文件有缺点:1:链接时只使用一种类型的文件(对象)会更容易,尤其是当所有文件都做同样的事情时。2:链接时(至少在GCC中),库(默认情况下)需要排序并且不能处理循环依赖。我想知道图书馆有什么优势(除了经常使用的第22条军规之外)。搜索了一段时间后,我得到的唯一解释似乎是单个库优于多个目标文件。 最佳答案

c++ - 在 Ubuntu 11.10 中安装所有用于开发的 OpenGL 库

我有一个刚刚安装的ubuntu11.10。我遵循this中的第一个答案问题。我安装了:暴饮暴食3freeglut3-devigor@ubuntu:~$sudoapt-getinstallfreeglut3[sudo]passwordforigor:Readingpackagelists...DoneBuildingdependencytreeReadingstateinformation...DoneThefollowingNEWpackageswillbeinstalled:freeglut30upgraded,1newlyinstalled,0toremoveand253notup

c++ - Thrift:是否可以仅使用 C++ Thrift 库进行序列化?

使用C++ApacheThrift库,是否可以仅使用序列化/反序列化而不使用RPC服务?据我了解this页面,可以使用Java库来完成。但是,我找不到C++库的类似类。 最佳答案 是的,这是可能的。Thrift缺少有关此主题的文档。好吧,关于任何事情。我在这里找到了这个:http://mail-archives.apache.org/mod_mbox/thrift-user/201010.mbox/%3C5EF8F634-79A2-45C4-9A04-6D96D3B7A84F@manbert.com%3E如果不需要通过网络传输数据,

c++ - 在静态库之外抛出 C++ 异常?

作为规则,异常不得传播模块边界,例如HerbSuttersC++编码标准(第62项)中解释的那样。当使用不同的编译器或仅使用编译器设置进行编译时,这可能会崩溃。我可以理解这个问题,例如的动态链接库。但我想知道它是否也适用于静态库。静态库是上述规则意义上的模块吗?如果库是使用其他编译器设置(例如对齐方式)编译的,如果从静态库中抛出异常并在应用程序中捕获,程序可能会崩溃? 最佳答案 通常,静态库必须由相同的编译器和相同的编译器设置(大部分)编译才能与交付物(动态库或可执行文件)兼容。然后,您可以在静态库的边界之外抛出异常,因为它与您的编

c++ - 如何找到在静态库中定义符号的位置

假设您使用包含多个工具和库的代码库,并且您想要移植(或复活)此类代码库中的某些组件,但是关于符号在各种库中的位置的任何线索要么丢失,要么需要很长时间才能找到查看代码本身(是的,改进的文档可以避免此类问题,但要求很高)。发现在哪个库中可以找到代码中使用的符号的最快方法是什么? 最佳答案 假设是一个linux机器,nm工具会在库文件中列出名称,来拯救。它可以用来进行广泛的搜索,如下所示:首先可以使用find找到所有可用的库(假设项目已经成功编译,没有您要添加的组件),然后可以将这样的find包含在一个在所有发现的库上调用nm的循环;然后

c++ - 将 Boost 库添加到 OS X Eclipse 中的 C++ 项目

我一直在尝试使用eclipse使用boost文件系统库来设置C++项目。我关注了these在我的系统上安装boost的说明。方向差不多下载摘录运行bootstrap.sh运行./bjamarchitecture=combined这似乎很顺利,没有错误。然后我启动了eclipse并创建了一个名为test的新测试项目,其中包含一个名为test.cpp的文件。里面的代码是:#include#includeintmain(){boost::filesystem::pathpath("/Users/schoen");//randompathnameboolresult=boost::filesy

c++ - 将字符串、整数和 float 序列化为字符数组,以便在没有库的情况下联网

我想通过网络传输数据,但我不想使用任何外国库(标准C/C++就可以)。例如:unsignedintx=123;chary[3]={'h','i','\0'};floatz=1.23f;我想要这个charxyz[11];数组。注意:要通过网络传输它,我需要unsignedint的网络字节顺序(htonl函数),然后我需要以某种方式将float序列化为IEEE754形式(互联网上有很多函数),我知道这一点。如何将它们放入xyz数组中,端到端整齐排列,以便我可以将其用作我的socket+send()函数的缓冲区?显然我有反向函数(ntohl,和一个反向IEEE754)来把它们弄出来,但我也需

c++ - 将 GDB 与 Eigen C++ 库一起使用

我正在使用可从http://eigen.tuxfamily.org/下载的EigenC++库.这是一个C++库,可以更轻松地处理矩阵和数组。我使用g++编译器和gdb进行调试。但是,我发现在使用gdb时无法打印Matrix(由Eigen提供)的内容。 最佳答案 您必须安装可以在eigen/debug/gdb/中找到的gdb扩展.文件开头的注释解释了如何安装它。 关于c++-将GDB与EigenC++库一起使用,我们在StackOverflow上找到一个类似的问题: