我正在尝试一些诡异的东西。我正在尝试编写C++程序,用GNU的g++编译,但不依赖于libstdc++:)但似乎我需要它,即使是最基本的东西也需要它。具有可配置功能集的libstdc++是可以接受的。我使用的命令是g++-nodefaultlibs-fno-rtti-fno-exceptions-lc没有libstdc++,我得到:undefinedreferenceto`operatordelete(void*)'undefinedreferenceto`operatornew(unsignedint)'undefinedreferenceto`vtablefor__cxxabiv1
我有两个用C++编写的算法。据我所知,用编译是常规的-O0-NDEBUG(g++)同时比较两种算法的性能(渐近它们是相同的)。但我认为优化级别对其中之一不公平,因为它在所有情况下都使用STL。使用普通数组的程序在使用-O0选项编译时比STL-heavy算法快5倍。但是当我用-O2-NDEBUG编译它们时,性能差异并没有太大的不同。有什么方法可以在优化级别-O0下充分利用STL(我在vector[]运算符中的性能受到严重影响)?在比较两种算法时,您使用什么优化级别(可能还有-NDEBUG等变量)?如果有人能提供一些关于比较用C++编写的算法的性能的学术研究趋势的想法,也会有很大的帮助?好
我正在尝试使用g++编译一个.cc文件,我需要它来链接一个.o文件。所以我尝试了:$g++-oclient-I../ipc-L../messages.oclient.cc/usr/bin/ld:error:../messages.o:cannotreaddirectory:Notadirectory我试过:$g++-oclient-I../ipc-l../messages.oclient.cc/usr/bin/ld:error:cannotfind-l../messages.pb.o$$ls-l../messages.o-rw-r--r--1hap497hap4972279362010
我有一个C++程序,其他人为其制作了一个make文件。我想用标志-g编译程序,但我不知道在哪里添加它。下面是make文件。CC=g++LOADLIBES=-lmCFLAGS=-Wall-O2SRC1=Agent.cppBreeder.cppCandidateSolution.cpp\Cupid.cppFateAgent.cppGrid.cppReaper.cpp\fitness.cppSRC2=main.cppSRC=$(SRC1)$(SRC2)OBJS=$(SRC1:.cpp=.o)AUX=$(SRC1:.c=.h)main:$(OBJS)#$(CC)$(CFLAGS)-o$(SRC
以下程序使用gcc编译但不使用g++,我只生成目标文件。这是prog.c:#include"prog.h"staticstructclnt_opstcp_nb_ops={4};这是prog.h:#ifndef_PROG_#define_PROG_#include#endif当我这样做时:gcc-cprog.c生成目标代码但是,g++-cprog.c给出错误:variable‘clnt_opstcp_nb_ops’hasinitializerbutincompletetype如何解决这个问题? 最佳答案 在clnt.h中看这个结构体的
我正在尝试编译一个简单的程序,用#includegtkmm.h的路径是/usr/include/gtkmm-2.4/gtkmm.h。g++看不到这个文件,除非我特别告诉它-I/usr/include/gtkmm-2.4。我的问题是,我如何让g++自动递归地查看/usr/include中的所有目录以查找其中包含的所有头文件,为什么这不是默认操作? 最佳答案 在这种情况下,正确的做法是在Makefile或构建脚本中使用pkg-config:#Makefileifeq($(shellpkg-config--modversiongtkmm-
我注意到,如果我在由g++编译的程序上运行strings,输出包含它使用的各种类的名称。程序是用-O3编译的,没有-g或-p,当我去掉二进制。我想知道为什么g++必须将此信息存储在二进制文件中?出现的类名似乎都是使用虚函数的类,所以我怀疑这与它有关。 最佳答案 这可能与RTTI有关,具体来说,RTTI允许您查询给定变量的类的名称。查看typeid关键词。如果是这种情况,那么它就可以解释为什么它只发生在具有虚函数的类中——RTTI仅适用于具有虚函数的类。编辑:正如@xeno指出的那样,它确实是RTTI,如果您添加-fno-rtti,则
当我尝试使用std::stoi并尝试编译它时,我收到错误消息“stoi不是std的成员”。我从命令行使用g++4.7.2,所以它不会是IDE错误,我的所有包含都按顺序排列,g++4.7.2默认使用c++11。如果有帮助,我的操作系统是Ubuntu12.10。有什么我没有配置的吗?#include#includeusingnamespacestd;intmain(){stringtheAnswer="42";intans=std::stoi(theAnswer,0,10);cout不会编译。但它没有任何问题。 最佳答案 std::st
followingexample不会使用g++4.8.2编译:#include#includeusingnamespacestd;intmain(){vectorv{1,2,3};v.erase(v.cbegin());//Compilercomplainsreturn0;}编译器说了以下内容。(它不是很可读,但它提示vector::const_iterator和vector::iterator之间没有已知的转换。)prog.cpp:Infunction‘intmain()’:prog.cpp:8:20:error:nomatchingfunctionforcallto‘std::ve
我的问题很简单:因为std::intmax_t根据cppreference定义为maximumwidthintegertype,为什么不对应GCC中的__int128_t? 最佳答案 我认为这违反了C和C++标准——或者gcc不考虑__int128_t是一个整数类型。C标准(1999版和2011版)不需要intmax_t成为标准类型之一;它必须是“能够表示任何有符号整数类型的任何值的有符号整数类型”。特别是,它可以是一个扩展整数类型——如果有一个128位扩展整数类型,那么intmax_t必须至少为128位宽。C标准甚至建议使用实现定