草庐IT

c++ - 使用包含另一个静态库的静态库时出现 LNK4006、LNK4221 警告

我正在尝试使用包含其他静态库的静态库。有两个项目:Engine、MyGame'Engine'将生成Engine.lib'MyGame'将在链接时使用Engine.lib。以下是我从visualstudio2012获得的构建消息:1>------RebuildAllstarted:Project:Engine,Configuration:DebugWin32------2>------RebuildAllstarted:Project:MyGame,Configuration:DebugWin32------1>Precompiled.cpp2>Main.cpp2>LINK:fatale

C++类成员的静态成员变量被实例化两次

我有一个模板类,它有两个静态成员变量,一个int另一个std::array.当我用两个不同的类(它们本身就是模板)作为模板参数实例化模板时,对于其中一个实例,一切都完美无缺,即两个变量只有一个拷贝。然而,对于另一个,数组在符号表中重复出现,而且我的代码确实有一个错误,当我在一个编译单元中的数组中设置一个值时,更改不会出现在另一个编译单元中。这是针对嵌入式系统的,这就是将静态模板用于一种编译时多态性这种奇怪习惯的原因。在代码中:header声明类本身//dacmux.hnamespaceHAL{templatestructdacmux{private:typedefstd::arrayc

c++ - 重复符号链接(symbolic link)器错误(C++ 帮助)

我现在正在学习一些CSP(约束满足)理论,并且正在使用this解析XML文件的库。我将Xcode用作IDE。我的程序编译正常,但当它链接文件时,我收到XMLParser_libxml2.hh文件的重复符号错误。我的文件是这样分开的:包含上述XMLParser文件的类头文件包含类头文件的类实现文件包含类头文件的主文件重复符号出现在main.o和classfile.o中,但据我所知,我实际上并没有两次添加该.hh文件。完整错误:ld:duplicatesymbolboolCSPXMLParser::UTF8String::to,std::allocator>>(std::basic_str

c++ - 每个 C++ 开发人员都应该了解的有关链接的知识

很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visitthehelpcenter.关闭10年前。问题关于链接如何工作的详细信息很少。此外,IDE隐藏了编译的细节,当您的项目出现一些与链接相关的问题时,这将是一个真正的痛苦。通常C++书籍告诉我C++code-->preprocessedc++code-->objectcode但是,尽管链接错误很常见,但他们确实没有详细说明普通开发人员应该了解的有关链接的知识。新手C++程序员应该如何知道如何处理如下所示的错误?XmlRpcSocket.o:

c++ - 扭曲的逻辑 : a global variable in one file refers to an extern variable but is also referred by that extern variable

文件A.cpp:#includeexternintiA;externintiB=iA;intmain(){std::cout文件B.cppexternintiB;externintiA=2*iB;编译链接运行,out进来debug和release模式是0,0我的问题是它是如何工作的,为什么在链接阶段没有问题?我正在使用VC++2003。 最佳答案 初始化程序覆盖了extern关键字,因此这没有什么“神奇”:您只是在不同的翻译单元中声明和定义两个完全不相关的变量。来自StandardforProgrammingLanguageC++-

c++ - 同一台机器上的 libstdc++ 64 位和 32 位版本

我正在尝试为64位平台交叉编译我的软件版本。我可以在同一台机器上安装32位和64位版本的libstdc++而不必担心破坏我的linux安装吗?操作系统是32位的ubuntu。我之前没有交叉编译过,只是想检查一下我是否设置了CFLAGS和LDFLAGS对于合适的CPU,一旦我安装了正确版本的libstdc++,我应该没问题。我检查了64位版本的ubuntu,但是它有一个符号链接(symboliclink)lib64->库如果在32位机器上也是这种情况,这会搞砸很多,有人知道如何排序吗?我现在遇到以下错误[exec]/usr/bin/ld:skippingincompatible/usr/

c++ - 静态和共享库符号冲突?

我有一个项目正在使用FreeImage和openCV,目前我们正在使用这两者的jpeg支持(我正在努力解决这个问题,但现在它必须保留)。无论如何,FreeImage将libjpeg7.0编译到它的静态库中,并且openCV的highgui库将它作为共享库链接(在我的系统Ubuntu9上,我安装了libjpeg6.2)。它们链接到一个最终库,该库用于链接到各种程序、java包装器等。所有这些都工作正常,在编译/链接期间没有符号冲突或任何东西。但是,当我使用openCVcvLoadImage函数打开图像时,它会在读取标题时死掉,这很可能是由于6.2和7.0中标题之间的差异。如果我取消链接F

C++:编译错误 - "no .eh_frame_hdr table will be created"

我应该使用数据分析程序进行物理实验。但是我无法编译它。代码很旧,与我能找到的当前GCC版本不兼容。为了让事情更耗时,我从一个修改了所有makefile以使其在Mac上编译的人那里得到了代码。我没有C++经验,但借助手册页、谷歌和耐心,我在途中修复了很多错误,但即使经过一周的尝试和谷歌搜索,我仍然坚持这一点。我认为相关的错误信息如下:/usr/bin/ld:errorin/home/daniel/skola/exjobb/miniballscripts/lib/libCommandLineInterface.so(.eh_frame);no.eh_frame_hdrtablewillbe

c++ - 链接器可以报告未使用的成员函数吗? (C++)(海合会)

std::string有超过30个可以在字符串对象上调用的成员函数。如果我只使用其中的几个怎么办?我假设未使用的成员函数不会占用可执行代码部分的空间。我很想知道链接器是否有可能确定一个未使用的成员函数,将其从编译二进制文件的一部分中删除,并报告它丢弃的函数。有什么办法吗?我在看gcc'slinkerflags,但我找不到任何相关内容。 最佳答案 自std::string是一个模板类(std::string只是一个typedef到std::basic_string),只有使用过的方法会被实例化,因此不会编译任何未使用的方法,因此它们不

c++ - gcc 链接器库搜索顺序;路径加上静态与共享

通读gcc手册,我认为以下两个说法是正确的:在命令行中指定的库搜索路径在“默认”路径之前搜索(我假设这意味着LIBRARY_PATH环境变量中的内容)共享库将优先于静态库链接(在没有标志说明不这样做的情况下)但这两者中哪一个占主导地位?例如,如果我输入gccmyprog.cpp-omyprog-Lmypath-lmylibrary在mypath中有一个静态库“libmylibrary.a”,在LIBRARY_PATH指定的某个地方有一个共享库“libmylibrary.so”,这些库中的哪个将被使用?我的猜测是静态库将被使用(即(1)占主导地位)但我看到一些有趣的编译错误让我质疑这个猜