草庐IT

c - 为什么 Windows 要求导入 DLL 数据?

在Windows上,可以从DLL加载数据,但需要通过导入地址表中的指针进行间接访问。因此,编译器必须知道正在访问的对象是否是使用__declspec(dllimport)从DLL导入的。类型说明符。这很不幸,因为这意味着设计用作静态库或动态库的Windows库的header需要知道程序链接到哪个版本的库。此要求不适用于函数,这些函数是为DLL透明地模拟的,stub函数调用实际函数,其地址存储在导入地址表中。在Linux上,动态链接器(ld.so)将所有链接数据对象的值从共享对象复制到每个进程的私有(private)映射区域。这不需要间接寻址,因为私有(private)映射区域的地址是模

c++ - 如何在库加载时将预处理器定义传递给 DLL

我正在开发一个链接到DLL的应用程序,该DLL本身包含一个数据结构,其定义因预处理器定义而异:structExample{uint8_tStringA[32];#ifUSE_Buint8_tStringB[32];#endif};我需要在我的应用程序中的不同时间使用结构的两个版本。因此,我似乎需要使用LoadLibrary加载DLL,其中USE_B未定义用于部分执行(这是标准且直接的),使用FreeLibrary卸载它,然后然后使用定义为非零值的USE_B再次加载它。我不确定如何执行此操作,如有任何帮助,我将不胜感激。 最佳答案 L

c++ - 如何在 C++ Windows 中包含第三方库?

我的下载文件夹中有boost库。当我尝试包含特定文件时。它正在抛出错误。下面是代码和我做的步骤。\main.cpp#include"type_index.hpp"intmain(){//somecodereturn0;}我打开命令提示符并运行以下命令g++-IC:\Users\Owner\Downloads\boost_1_70_0\boost-omainmain.cpp命令提示符出现以下错误Infileincludedfrommain.cpp:2:0:C:\Users\Owner\Downloads\boost_1_70_0\boost/type_index.hpp:17:28:fa

c - 我在哪里放置用于 Windows、Mac 和 Linux 的 C 库

我已经查看了几个地方以找出在Mac上放置文件的位置,似乎将它们放置到/usr/lib/libmylib.dylib中。和/usr/include/mylib.h是正确的位置,而不是在HOME目录或/usr/local/lib中.(这是针对用户在其计算机上安装的东西)。请告诉我这是否正确。然后我剩下的问题是在Windows和Linux上放置C库的等效(即最佳)位置。寻找here对于Windows表示%windir%\system32或%SystemRoot%\winsxs.但随后他们似乎开始说,由于多种原因,它仍然是一个糟糕的地方。所以我不确定。然后剩下的就是如何为Linux做.似乎与M

c++ - 使用 C 或 C++ 的 Windows 的 Memcached 客户端?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭5年前。Improvethisquestion我需要一个可移植的C/C++解决方案,所以我正在寻找一个适用于Memcached的C/C++客户端库,它可以在Windows和Unix上运行。有什么建议吗?

python - 为 Windows 7 编译 IP2Location Python 扩展

我想编译/安装在此处找到的IP2LocationPython扩展:www.ip2location.com/python.aspx我尝试按照这些网站上的说明进行操作:eli.thegreenplace.net/2008/06/28/compiling-python-extensions-with-distutils-and-mingw/boodebr.org/main/python/build-windows-extensions但我没有得到任何地方。问题是Python扩展依赖于另一个C库:www.ip2location.com/c.aspx当我尝试在cygwin中编译这个库时,我得到以

c++ - 在 Windows 上安装 C/C++ 库

我现在正在学习(好吧,正在尝试)C,但我仅限于在WindowsXP中工作。我已经设法设置并学习了如何使用Emacs,并且可以使用gcc(至少来自Emacs!)编译简单的C程序,但我已经到了想要安装SDL之类的东西来玩的地步用它。问题是SDL的安装说明表明,在使用MingW的Win32环境中,我需要使用MSYS运行./configure和make/makeinstall来安装SDL,就像在Linux上一样。我注意到,当我解压缩SDL-dev包时(忘记了确切的名称,抱歉)那里有与MinGW目录中的文件夹相对应的文件夹(SDL/include->MinGW/include)。我说的所有./c

c - 持续的虚拟内存增加是否表明内存泄漏?

进程的虚拟内存(私有(private)字节)持续增加是否表明内存泄漏...?我正在使用第三方库。不断使用库导致虚拟内存不断增加。所以它是内存泄漏,可能导致虚拟内存不断增加,也可能是任何其他原因。 最佳答案 我们说不准。一些应用程序在您使用它们时自然会增加内存大小。想一想文字处理器——它的内存使用量会随着您的书写而增加。但是您应该对自己的应用程序的内存使用模式有一个很好的了解,所以您应该能够自己回答这个问题。 关于c-持续的虚拟内存增加是否表明内存泄漏?,我们在StackOverflow上

c++ - 我应该如何在 Win32 C++ 应用程序中集成和打包此第三方库?

我们有一个(非常大的)自定义ActiveX控件的现有代码库,我想集成libkml为了与KMLmap数据交互,而不是重新发明轮子。问题是,我是一个相对较新的Windows开发人员,来自Linux世界,我真的不确定集成第三方库的正确方法是什么。值得庆幸的是,libkml确实提供了用于编译它的MSVCC项目,因此移植不是问题。我想我有几个我能想到的选择:直接构建和链接库。对于“主”项目,我们已经有了一个包含项目文件的解决方案;我可以将libkml项目添加到该解决方案,但我宁愿不这样做。libkml代码相对于我们的应用程序代码发生变化的可能性很小。静态链接到libkmlbuild生成的.lib

c - 一个 C 程序演示 cmd.exe 和一个 linux shell 例如bash,定界参数?

我听说cmdshell将整个内容传递给命令,然后标准C库将其分隔,同时考虑空格和引号。而在Linux中,只有shell可以做到这一点。一个带有while循环的程序,显示argsv[i]显示它是如何定界的,但不显示shell做了什么,也没有显示C库做了什么。任何人都可以指出或向我展示一个可以显示它的程序吗? 最佳答案 我想你想知道shell在linux中是如何工作的,对吗?我认为当我们在命令shell上键入任何内容时,shell接收所有参数作为字符串格式的参数,shell然后fork+exec二进制文件并将所有参数作为环境变量传递给新