草庐IT

c++ - 在 GCC 中链接 .a 和 .o 文件

我有两个预编译库:X.a和Y.a以及使用这两个库的test.cpp(没有main函数)源代码。我使用以下方法编译了C++:g++-ctest.cpp我得到了“test.o”。因为test.cpp使用X.a和Y.a以及其他GCC库中的某些函数,现在我如何将这三个链接在一起以生成.a文件?顺便说一句,我正在使用MinGW在Windows下执行这些操作。我可以将这个.a文件重命名为.lib并在VC中使用这个.lib吗?谢谢! 最佳答案 NowhowcanIlinkthesethreetogethertogeneratea.afilebec

c++ - 在 GCC 中使用 shared_ptr 的可移植方式

GCC4.1使用header和GCC4.3使用header,我需要一种可移植的方式来使用shared_ptr使用GCC4.3.2和GCC4.2.1,有没有办法在不检查GCC版本宏或使用外部库(如Boost)的情况下做到这一点? 最佳答案 仍将与gcc4.3一起工作。如果您想同时支持这两个版本,只需使用tr1姓名。 关于c++-在GCC中使用shared_ptr的可移植方式,我们在StackOverflow上找到一个类似的问题: https://stackove

c++ - 使用私有(private)复制/移动构造函数进行聚合初始化

我在为anotherquestion测试一些东西时遇到了这个问题关于初始化聚合。我正在使用GCC4.6。当我用列表初始化聚合时,所有成员都在适当的位置构建,无需复制或移动。即:intmain(){std::array,2>a{std::array{Goo{1,2},Goo{3,4}},std::array{Goo{-1,-2},Goo{-3,-4}}};}让我们通过一些嘈杂的构造函数来确认:structGoo{Goo(int,int){}Goo(Goo&&){std::cout运行时,不会打印任何消息。但是,如果我将移动构造函数设为私有(private),编译器会提示'Goo::Goo

c++ - <::上的 gcc TemplateClass<::GlobalSymbol> 错误

出于某种原因,gcc不喜欢模板参数是全局命名空间符号,即TemplateClass当我这样做的时候它会起作用TemplateClass也就是gcc不喜欢看是否可以在不修改源(自动生成的)的情况下进行预防?UPD:我不想修改源代码。我发现-fpermissive似乎将其更改为警告而不是错误,但尚未找到如何从代码中启用它(例如使用编译指示)。UPD:嗯,我发现了#pragmaGCCdiagnosticignored"-fpermissive"不管怎样,我接受了帮助我找到答案的答案。 最佳答案 是digraph相当于[,因此错误。由于您不

c++ - 如何构建 NS-3 以使用 C++0x/C++11 库?

我需要在网络模拟器NS-3的代码中使用像unordered_map这样的数据结构。它使用wafbuilder编译源代码。我很困惑我应该在哪里添加-std=c++0x以添加到编译器标志?我尝试使用以下方法将它附加到主wscript文件中的CXXFlags:module.env.append_value('CXXFLAGS','-std=c++0x');但我仍然收到此错误:ThisfilerequirescompilerandlibrarysupportfortheupcomingISOC++standard,C++0x.Thissupportiscurrentlyexperimental

c++ - 虚假 "missing sentinel in function call"

如果编译为CandC++源代码,这个简单的代码片段会使用g++4.7.0生成“函数调用中缺少标记”警告。我相信这是编译器的错误,因为最终的NULL值(value)就在那里。#includeintmain(){execlp("mkdir","mkdir","-p","test",NULL);return0;}我说得对吗? 最佳答案 不,你错了。在C++中NULL类似于0或0L并且在C中可能是相同的。如果该常量的类型小于指针那么它是不安全的将其传递给可变参数函数,因为高位将被垃圾填满。在Linux上,execlp(1)手册页说:Thel

c++ - 使用 GCC 的函数检测,为什么使用 C++ STL 容器或流 I/O 会导致段错误?

我最近了解到使用GCC的代码生成功能(特别是-finstrument-functions编译器标志)可以轻松地向我的程序添加检测。我认为它听起来很酷,并在以前的C++项目中尝试过。在对我的补丁进行了几次修改之后,我发现每当我尝试使用STL容器或使用C++流I/O打印到标准输出时,我的程序都会立即因段错误而崩溃。我的第一个想法是维护一个std::list的Event结构typedefstruct{unsignedcharevent_code;intptr_tfunc_addr;intptr_tcaller_addr;pthread_tthread_id;timespects;}Event

c++ - 命名空间 ‘function’ 中的 ‘std’ 没有命名类型

主.cc:#include#include#include"segtree.h"//NOLINTintmain(){constintn=8;SegmentTreesegmentTree(n,1,std::multiplies());for(inti=0;i分割树.h:#ifndefSEGTREE_H_//NOLINT#defineSEGTREE_H_#include#include#includetemplateclassSegmentTree{private:std::vectortree;intlevels;intn;intel;std::functionf;Tquery(intl

c++ - 在段错误之前缺少 cout

我的代码中有一个段错误,所以我在可疑方法上放置了很多cout来定位位置。boolWybierajacyRobot::ustalPoczatekSortowania(){cout::iteratortmp;cout如果该方法被调用并且没有段错误,则打印来自T1和之前的每个cout。在++tmp行中是段错误,因为ostatnioUlozony是NULL,当方法转到T2时,没有first的每个cout都没有被打印出来。为什么?我正在使用Netbeansanggcc,我在Netbeans中发现了带调试的“段错误行”,但在我使用之前,我花了一些时间来添加cout行和运行程序。非常感谢,

c++ - "#pragma GCC diagnostic warning"与海湾合作委员会

这个问题在这里已经有了答案:HowcanIdisable#pragmawarnings?(5个答案)关闭9年前。我使用GCC4.5.1并收到如下警告:warning:expected[error|warning|ignored]after'#pragmaGCCdiagnostic'原因是“#pragmaGCCdiagnosticpush”,对于4.6版之前的GCC不存在。我不能更改代码(这不是我的)和GCC版本。我怎样才能禁用这些警告?一些GCcflags可能是?P.S.:我看到Why"pragmaGCCdiagnosticpush"popwarninginGCC/C++?,但我的问题