草庐IT

c++ - 没有 libstdc++ 的 g++ - 可以做到吗? - 一个非常可配置的轻量级 libstdc++,我可以在其中轻松取出东西也可以解决问题

我正在尝试一些诡异的东西。我正在尝试编写C++程序,用GNU的g++编译,但不依赖于libstdc++:)但似乎我需要它,即使是最基本的东西也需要它。具有可配置功能集的libstdc++是可以接受的。我使用的命令是g++-nodefaultlibs-fno-rtti-fno-exceptions-lc没有libstdc++,我得到:undefinedreferenceto`operatordelete(void*)'undefinedreferenceto`operatornew(unsignedint)'undefinedreferenceto`vtablefor__cxxabiv1

c++ - 在比较用 C++ 编写的两种不同算法时,您使用的优化级别 (g++) 是多少?

我有两个用C++编写的算法。据我所知,用编译是常规的-O0-NDEBUG(g++)同时比较两种算法的性能(渐近它们是相同的)。但我认为优化级别对其中之一不公平,因为它在所有情况下都使用STL。使用普通数组的程序在使用-O0选项编译时比STL-heavy算法快5倍。但是当我用-O2-NDEBUG编译它们时,性能差异并没有太大的不同。有什么方法可以在优化级别-O0下充分利用STL(我在vector[]运算符中的性能受到严重影响)?在比较两种算法时,您使用什么优化级别(可能还有-NDEBUG等变量)?如果有人能提供一些关于比较用C++编写的算法的性能的学术研究趋势的想法,也会有很大的帮助?好

c++ - 如何使用 g++ 链接 .o 文件

我正在尝试使用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++ - 如何将编译标志 -g 添加到 make 文件?

我有一个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

c++ - 为什么这个程序是用 gcc 编译的,而不是用 g++ 编译的?

以下程序使用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中看这个结构体的

c++ - g++ 递归地包含所有/usr/include

我正在尝试编译一个简单的程序,用#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-

c++ - 为什么 g++ 在编译后的二进制文件中存储类名?

我注意到,如果我在由g++编译的程序上运行strings,输出包含它使用的各种类的名称。程序是用-O3编译的,没有-g或-p,当我去掉二进制。我想知道为什么g++必须将此信息存储在二进制文件中?出现的类名似乎都是使用虚函数的类,所以我怀疑这与它有关。 最佳答案 这可能与RTTI有关,具体来说,RTTI允许您查询给定变量的类的名称。查看typeid关键词。如果是这种情况,那么它就可以解释为什么它只发生在具有虚函数的类中——RTTI仅适用于具有虚函数的类。编辑:正如@xeno指出的那样,它确实是RTTI,如果您添加-fno-rtti,则

c++ - g++ 4.7.2 中缺少 std::stoi?

当我尝试使用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

c++ - 使用 g++ 4.8 时缺少 std::vector::erase() 的 const_iterator 重载

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

c++ - 为什么在 g++ std::intmax_t 中不是 __int128_t?

我的问题很简单:因为std::intmax_t根据cppreference定义为maximumwidthintegertype,为什么不对应GCC中的__int128_t? 最佳答案 我认为这违反了C和C++标准——或者gcc不考虑__int128_t是一个整数类型。C标准(1999版和2011版)不需要intmax_t成为标准类型之一;它必须是“能够表示任何有符号整数类型的任何值的有符号整数类型”。特别是,它可以是一个扩展整数类型——如果有一个128位扩展整数类型,那么intmax_t必须至少为128位宽。C标准甚至建议使用实现定