草庐IT

c++ - 具有重复符号的 C++ 插件库上的段错误

我有一个跨平台的C++应用程序,它被分成几个共享库并从插件共享库加载附加功能。插件库应该是自包含的,并且在不了解或不依赖于调用应用程序的情况下自行运行。其中一个插件包含从主应用程序复制的代码,因此包含与引擎中的名称重复的符号名称。(是的,我知道这通常是一个禁忌,但在编写插件时,引擎是一个单一的二进制文件,无法共享库。)在Windows上,一切运行良好。在Linux上,我们遇到了段错误。通过查看错误的堆栈跟踪,它是在插件中调用重复类名中的函数时发生的。这似乎是引擎和插件的共享代码版本略有不同的结果(某些类功能在插件中被注释掉了)。就好像插件正在将它的符号运行时链接到引擎而不是它自己的。我

c++ - 链接静态库时静态对象的初始化

在另一个共享库中声明的静态对象的初始化规则是什么?例如,请考虑以下内容:文件X.hpp:structX{X();staticXconsts_x;};structY{Y(Xconst&){}};文件X.cpp:#include"X.hpp"#includeX::X(){std::cout我在静态库libX.a中编译了X.cpp,并尝试链接以下可执行文件(文件main.cpp):#include"X.hpp"intmain(){(void)X::s_x;//(1)Xx=s_x;//(2)Yy=s_x;//(3)}只有(1)或(2),什么也不会发生。但是如果我添加(3),静态对象被初始化(即

c++ - 用于 2D/3D 游戏开发的 Qt 库

作为一种爱好,我一直致力于重新制作一款旧视频游戏,我想尽可能避免重新发明轮子。该游戏主要基于GUI,但GUI需要在外观和感觉方面进行定制,并且还需要与少数游戏画面的3DOpenGL渲染配合使用。为了给你一个想法,下面是初始原型(prototype)的屏幕截图:使用了很多动画和3D,但GUI小部件的行为与标准桌面应用程序中的行为非常相似。到目前为止,我一直在使用自己的GUI库(它不够健壮或不完整,而且我遇到了一些问题)。鉴于Qt的声誉和令人印象深刻的功能,以及Qt网站上的一些漂亮的屏幕截图,我一直在考虑迁移到Qt。但我以前从未使用过Qt,所以我真的不知道它有什么能力,或者学习它需要投入什

android - Android Eclipse 项目中的 Qt C++ 库 : QSQLITE driver not loaded

我已经创建了一个使用QtSQL打开SQLite数据库的Qt动态库,但是我收到了这个错误:QSqlDatabase:QSQLITEdrivernotloadedQSqlDatabase:availabledrivers:DLL作为QtAndroid应用程序的一部分运行良好,但是我需要通过JNI从在Eclipse中开发的现有Java应用程序中使用它。这是重现问题的最短示例代码。我从Java加载库并调用它的init()方法:System.loadLibrary("plugins_sqldrivers_libqsqlite");System.loadLibrary("Qt5Sql");Syst

c++ - LNK2001:我的 boost 库(可能)构建不正确

我决定将我的boost库从1.61更新到1.63,在我更新为使用新文件的项目中,我收到了一些以前没有收到的新错误消息:errorLNK2001:unresolvedexternalsymbol"classboost::system::error_categoryconst&__cdeclboost::system::system_category(void)"(?system_category@system@boost@@YAAEBVerror_category@12@XZ)errorLNK2001:unresolvedexternalsymbol"classboost::system

c++ - 静态库、动态库、DLL、入口点、头文件……如何活着摆脱这个?

我最近不得不在Windows下为一个大学项目编写C++程序,我对静态和动态库系统、编译器需要什么、链接器需要什么、如何构建库……感到很困惑关于这个的好文件吗?我对*nix库系统也很困惑(所以,dylibs,ar工具,如何编译它们......),你能指出一个关于各种体系结构上当前库技术的评论文档吗?注意:由于我的知识不足,此消息可能包含错误的概念,请随时对其进行编辑。谢谢请随意添加更多引用,我会将它们添加到摘要中。引用资料由于你们中的大多数人发布了*nix或Windows特定的引用资料,我将在这里总结最好的引用资料,我将把维基百科的答案标记为已接受的答案,因为这是一个很好的起点(并且内部

c++ - 我应该选择哪个轻型 C++ 事件/委托(delegate)(信号/槽)库?

我知道questionhasalreadybeenasked并回答了,但那是一年多以前的事了,看起来有新的替代品了。所以我正在用SFMLlibrary编写游戏代码(实际上我开始发现它非常酷)并且我正在寻找一个轻便快速的事件/委托(delegate)库。在做了一些研究并搁置了经典的(Boosts.Signals、libsigc++)之后,我找到了“cpp-events”。它现在看起来不是很流行——因为它是一个非常新的库——但它似乎最难测试。我很想知道这里是否有人尝试过并可以提供一点反馈。您还有其他类似(或更好)的选择可以推荐吗?我看起来更像是真正的项目(将被维护)而不是论坛上的答案。谢谢

c++ - 创建静态和共享 C++ 库

我想在项目中构建静态库和共享库。我知道需要从使用-fpic编译的对象创建共享库以获得位置独立代码,而静态库不需要这个。这一切都很好,我可以创建共享库或静态库。我不想两次编译我的源代码以获得不同的目标文件,那么这通常是如何完成的呢?我读了howtogetasharedlibrarybasedonastaticone.但是,该示例显示了使用-fpic构建的静态库。这是要走的路吗?有什么需要注意的地方吗?是否有通用方法来编译静态库和共享库?例如。首先静态并基于库创建一个共享版本?我很想知道是否有不同的方法,以及选择时要考虑的因素。我在Linux上使用gcc4.4。提前致谢!

c++ - 在 perl 中调试由 SWIG 包装的共享库

我在Perl中使用SWIG包装了我的C/C++代码。由于包装代码,我几乎没有段错误。我正在尝试将ddd与Perl脚本一起使用,但不幸的是,即使我在脚本的一行(调用C/C++代码的代码)上设置断点,ddd也是无法进入C/C++代码。当我调试Perl代码时,有什么方法可以在我的C库中设置断点,或者当我运行此Perl脚本时,您知道调试C库的好方法/工具吗?我正在使用Linux/gcc。 最佳答案 我做了一件简单的事情。我直接在perl解释器上调用了gdb。gdb/usr/bin/perl(gdb)rmyscript#blockthescr

c++ - 编译检查是否编译为静态库

如果项目正在编译为库,我如何在编译时检查?(静态库)我可以检查某种静态断言或其他标志吗?我不能自己添加预处理器变量,因为它是一个实用程序,将在公司的其他项目中使用。所以我想知道是否有一些预处理器标志是默认发送的。我正在使用VisualStudio2010 最佳答案 预定义宏列表中没有这样的东西-http://msdn.microsoft.com/en-us/library/b0084kay%28v=vs.100%29.aspx.但默认情况下,如果它是“静态库”项目,MSVC会将_LIB添加到预处理器定义列表。(它还为DLL添加了_U