jjzjj

c++ - 与同一个库链接两次是 g++ 的问题吗?

我注意到,当我使用gcc创建我的应用程序并在链接阶段查看输出时,我看到以下库包含两次:/home/rb01/opt/trx-HEAD/gcc/4.2.4/lib/../lib64/libstdc++.so所以我只是想知道这是g++(gcc)的问题还是第二个被忽略了?谢谢! 最佳答案 如果库中的符号已经解析,链接器将忽略它们。对于共享库,就像在这种情况下一样,链接器实际上并不链接。对于静态(.a)库,命令行上的多个拷贝实际上很有用,即使不是很漂亮,例如,如果main访问libb,libb访问libc,libc访问libb中的某些内容,

c++ - 使用 boost spirit 语法构建错误(boost 1.43 和 g++ 4.4.1)第二部分

我在编译一个小的spirit/qi语法时遇到了问题。我正在使用boost1.43和g++4.4.1。输入语法头:构建错误似乎指向“指令”规则的定义,也许是“[sp::_val=sp::_1]”以某种方式破坏了它,但这或多或少基于精神文档教程是用xml节点解析器做的输入语法.h#include#include#include#include#include#include#include#include#include#include#include#include#includenamespacesp=boost::spirit;namespaceqi=boost::spirit::q

c++ - vector<T>.erase() 与 g++ 的问题

以下代码在msvc上构建时没有错误,但在g++上无法编译。if(*it==listener){it=listeners.erase(it);}错误在于删除,完整代码为:voidAguiListener::removeListener(AguiWidget*listener){for(std::vector::const_iteratorit=listeners.begin();it!=listeners.end();++it){if(*it==listener){it=listeners.erase(it);}}}听众是:std::vectorlisteners;但是g++吐出大量错误

c++ - Linux g++ 在 C++ 中嵌入 Prolog 逻辑引擎

我在一个C++程序中有一些逻辑,它不仅异常复杂,而且需要多个解决方案,而Prolog是理想的解决方案。它有点像防火墙配置脚本,检查操作的输入,但有时需要多个操作。我想要的是这样的:classPrologEngine{LoadLogic(constchar*filename)throwPrologException;//Loadafileofprologrules,predicatesfactsetcintextualformat.MustbecallablemultipletimestoloadANDCOMPILE(forspeed)prologrulefiles.std::vecto

c++ - 如何在 Mac 上将 #include <random> 与 g++ 一起使用?

我正在尝试编译一个从别人那里得到的C++程序。它是在Windows上开发的,g++给出了一些编译错误。其中之一是#include这给出了以下错误:CandidateSolution.cpp:2:18:error:random:Nosuchfileordirectory。我试图找到可以从中获取error.h文件的位置,但找不到。我怎样才能让它发挥作用? 最佳答案 该头文件是C++11的新头文件。尝试使用-std=c++11或-std=c++0x。另外,请确保您的编译器是最新的。 关于c++

c++ - g++ 对 ZMQ 的 undefined reference

我在我工作场所的电脑上开发了我的项目(一切进展顺利),但是当我尝试在我的家用电脑(都是ubuntu12.04)上编译时,我收到以下消息:undefinedreferenceto`zmq_sendmsg'我不明白我错过了什么,因为我看到了这个/usr/local/lib/libzmq.so/usr/local/lib/libzmq.so.3/usr/local/lib/libzmq.so.3.0.0所以我的ZeroMQ安装似乎没问题。有人可以建议我可以检查什么吗? 最佳答案 链接时必须添加-lzmq以便链接器从libzmq中提取函数。

c++ - mingw g++ 4.7.2 中未声明的 decltype

出于某种原因,当尝试在mingw上用G++编译以下代码时#include#include#includeintmain(intargc,char**argv){std::strings("Hello,World!");decltype(s.size())punct_cnt=0;for(autoc:s){if(ispunct(c))++punct_cnt;}std::cout出现以下错误test.cpp:Infunction'intmain(int,char**)':test.cpp:9:23:error:'decltype'wasnotdeclaredinthisscopetest.c

c++ - 在这种情况下,为什么 g++ 和 clang 会破坏 namespace 抽象?

编译:structstr{};namespacea{voidfoo(strs){}}namespaceb{voidfoo(strs){}voidbar(strs){foo(s);}}intmain(int,char**){return0;}但这不是(将结构定义移到命名空间a内)namespacea{structstr{};voidfoo(strs){}}namespaceb{voidfoo(a::strs){}voidbar(a::strs){foo(s);}}intmain(int,char**){return0;}我得到的错误是bad.cpp:Infunction‘voidb::b

c++ - 最烦人的解析 : why doesn't `g( ( f() ) );` call `f` 's default constructor and pass the result to `g` 's ctor that takes a `f` ?

这不是Mostvexingparse:whydoesn'tAa(());work?的拷贝,它基于Aa());形式的解析,其OP认为可以使用额外的集合默认构造一个A对象括号。相比之下,我的问题是关于2个类,f和g,其中f具有默认构造函数,而g的构造函数采用f。我想用一个临时的f参数调用g的构造函数,而不使用统一的初始化语法。g的构造函数中有一个std::cout语句,因此缺少输出表示函数声明而不是g对象实例化。我在注释中用3个数字注释了示例代码。#1和#2编译时#3被注释掉,反之亦然:#includestructf{};structg{g(f){std::cout#1:我认为#1声明了一

c++ - 为什么 g++ 4.8.1 会发出转换警告

当我以这种方式用g++4.8.1(64位)编译下面的代码时:$g++-Wconversion-omainmain.cpp我得到这个结果:main.cpp:Infunction‘intmain()’:main.cpp:12:20:warning:conversionto‘int’from‘longunsignedint’mayalteritsvalue[-Wconversion]inti=sizeof(x)/sizeof(x[0]);^我的期望是编译器应该能够在编译时计算表达式。如果您用普通的c编写类似的程序,gcc的工作就像一个魅力。这应该被认为是g++中的错误(例如clang++没有