草庐IT

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

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

c++ - 将私有(private)库静态链接到公共(public)库以隐藏符号

关闭。这个问题需要更多focused.它目前不接受答案。想改善这个问题吗?更新问题,使其仅关注一个问题editingthispost.2年前关闭。Improvethisquestion考虑以下:我正在用C++开发一个静态库X,它在内部使用著名的静态库Yv2.0;我只想分发一个库X',即X和Y静态链接/合并以供内部使用;开发人员想在他的可执行文件中使用X';此外,他需要Yv1.0(不是v2.0,就像我一样);Yv1.0和v2.0有一些共同的符号,其中一些共同符号的行为也不同。我开发X时严格要求将Yv2.0用于某些内部业务。这就是说我无论如何都不能恢复到Yv1.0。另一方面,开发者对使用Y

c++ - 如何获取所有函数参数值列表并将它们链接到 Visual C++ 中的日志记录类?

我们有大量函数公开为外部API,我们需要跟踪每次调用中的所有参数值。目前我们有一个接受所有参数列表的宏:voidSomeApiFunction(boolparameter1,constwchar_t*parameter2){LOG_PARAMETERS(parameter1宏扩展如下:#defineLOG_PARAMETERS(x)GlobalLoggerObject和GlobalLoggerObject类型为classCLogger有operator为所有可能的参数类型重载-像这样:templateCLogger&operator这样我们就可以拥有任意长度的参数列表,这要归功于链它们

c++ - 如果链接到未使用的库,可执行文件的构建是否不同?

除了更长的编译时间之外,链接未使用的库还有什么缺点吗?例如,使用以下两种方式之一编译的程序的可执行文件是否有任何区别:g++-omainmain.cppg++-omainmain.cpp-llib1-llib2-llib3-lmore*构建main实际上不需要任何库文件。我认为这没有什么区别,因为文件大小相同,但我要求确认。 最佳答案 视情况而定。如果liblib1.a、liblib2.a、liblib3.a是静态库,没有使用任何符号他们,那就没有区别了。如果liblib1.so、liblib2.so或liblib3.so是共享库,

c++ - 链接到使用不同编译器标志构建的静态库是否安全

我使用GoogleTest测试我的C++项目,发现Ubuntu包中不再分发预编译库后,我在项目网站上找到了以下内容:IfyoucompileGoogleTestandyourtestcodeusingdifferentcompilerflags,theymayseedifferentdefinitionsofthesameclass/function/variable(e.g.duetotheuseof#ifinGoogleTest).Therefore,foryoursanity,werecommendtoavoidinstallingpre-compiledGoogleTestli

c++ - 如何链接到 cpp-netlib

我想将库cpp-netlib用于C++项目。因此,我在自制软件的帮助下安装了boost库(操作系统是MacOSX10.8)。然后我从项目主页下载了cpp-netlib,使用cmake为g++创建了Makefile并成功应用了make。“maketest”通过了所有测试。然后我把cpp-netlib的include文件夹复制到boost目录下。所以这是麻烦开始的时候:我尝试编译文档的第一个示例http-client但无法让它工作。当我用g++test.cpp-oout-I/usr/local/Cellar/boost/1.53.0/include-L/usr/local/Cellar/b

windows - Win32 应用程序是否自动链接到 ntdll.dll?

我刚刚偶然发现执行此操作GetModuleHandle("ntdll.dll")无需事先调用LoadLibrary("ntdll.dll").这意味着ntdll.dll已经加载到我的进程中。是否可以安全地假设ntdll.dll将始终加载到Win32应用程序中,从而不需要调用LoadLibrary? 最佳答案 来自MSDNonLoadLibrary()(强调我的):Thesystemmaintainsaper-processreferencecountonallloadedmodules.CallingLoadLibraryincre

windows - 使用 DEF 文件而不是 LIB 文件链接到 DLL?

我了解到您可以:将.DLL文件转换为.DEF文件,其中包括其导出(编辑:这不适用于许多约定)将.DEF文件转换为.LIB文件,您可以使用该文件链接到DLL为什么(大多数)链接器不能链接到给定仅.DEF文件而不是.LIB文件的DLL? 最佳答案 最终,这里的答案是“因为没有人非常想要它,而且它并没有真正帮助任何事情”。DEF文件是为DLL创建导入库的输入文件。然后,稍后,当另一个链接使用DLL时,importlib本身就是一个输入。importlib从外面看起来很特别,但当你看里面时,它实际上只是一个稍微特殊的库,里面有对象。完全可以

c - 链接到 c 中的 glew

我无法正确链接到glew。我做了:#defineGLEW_STATIC#include"glew/glew.h"#pragmacomment(lib,"glew/glew32s.lib")但是,我仍然得到错误:LNK2019:未解析的外部符号__glewGenBuffersARB在函数初始化中引用 最佳答案 为自己省去很多麻烦,只需将glew.c文件放入您的项目中即可。我从不费心链接到外部的glew库。一旦你有了它,GLEW_STATIC宏就会起作用。它只是一个文件,并且(如果这对您很重要)它将很好地跨平台携带(而不是必须重建多个特

python - Windows 如何将 pe 文件链接到它在目录文件中的签名?

运行signtool.exeverify/a/vC:\Windows\notepad.exe我可以看到notepad.exe的签名在C:\Windows\system32\CatRoot\{F750E6C3-38EE-11D1-85E5-00C04FC295EE}\ntexe.cat。signtool如何知道此pe文件的签名所在的位置?我正在尝试在python中复制此signtool行为。获得目录文件后,我可以使用下面的代码获取证书信息,但我看不到Windows如何将文件链接到目录。importwin32com.clientcatpath="C:\\Windows\\system32\