草庐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++ - <::上的 gcc TemplateClass<::GlobalSymbol> 错误

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

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++ - "#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++?,但我的问题

c++ - std::atomic 库依赖项 (gcc 4.7.3)

我一直在尝试使用std::atomic进行编译,但我得到了对__atomic_load、__atomic_store和__atomic_store_16的未解析引用。我知道在更高版本的gcc(4.8+?)中包含-latomic,但我正在使用gcc4.7.3进行编译;我试过添加-latomic_ops和-latomic_ops_gpl,但两者似乎都没有太大作用。我现在正在安装gcc4.8.1,但我确实有一个真正需要为4.7.3编译的发布平台。非常感谢。编辑:好的,这是导致我遇到的问题的一些代码:atomics.cpp#include#includestructdataStruct{int

c++ - 代码可以用 clang 编译,但不能用 gcc 编译

我有这段代码可以用clang编译得很好(即使使用-Weverything),但是gcc会发出错误。#include#include#includeusingnamespacestd;classPhonebookWriter{public:PhonebookWriter(conststring&fname):fname_(fname),names_(),numbers_(){}PhonebookWriter&operator()(conststring&name,conststring&number){names_.push_back(name);numbers_.push_back(n

c++ - gcc/C++ : If CPU load is low, 那么代码优化没什么用,对吗?

我的同事喜欢使用带“-g-O0”的gcc来构建生产二进制文件,因为如果发生核心转储,调试很容易。他说不需要使用编译器优化或调整代码,因为他发现生产过程中的CPU负载不高,例如30%左右。我问他原因,他告诉我:如果CPU负载不高,瓶颈一定不是我们的代码性能,应该是一些IO(磁盘/网络)。因此,使用gcc-O2无法改善延迟和吞吐量。这也表明我们在代码中没有太多需要改进的地方,因为CPU不是瓶颈。对吗? 最佳答案 关于CPU使用~优化我希望程序中的大多数优化问题都与高于平常的CPU负载相关,因为我们说次优程序做的比理论上需要的多。但这里的

c++ - GCC 和 Clang 是否优化逐字段结构复制?

例如给予typedefstructA{inta;intb;intc;}A;typedefstructB{intd;inte;intf;}B;voidf(B&b1,A&a2){b1.d=a2.a;b1.e=a2.b;b1.f=a2.c;}f可以替换为memcpy(特别是如果结构有更多字段)。两个版本会产生相同的代码吗?如果我们复制到的结构的字段少于A怎么办?即typedefstructC{intg;inth;}C;voidh(C&c1,A&a2){c1.g=a2.a;c1.h=a2.b;}我很感兴趣,因为我生成的代码包括这样的结构拷贝,通常会更改字段的顺序,我想知道是否应该对这些情况进行

c++ - gcc 在 + 运算符中缩小转换

我正在尝试使用GCC6编译一些相当简单的C++代码,但收到缩小转换警告。这是有问题的,因为我们将警告视为错误。structS{shortinta;shortintb;};shortintgetFoo();shortintgetBar();std::arrayarr={{{5,getFoo()},{3,getFoo()+getBar()}//Narrowingconversionhere?}};您可以在https://godbolt.org/g/wHNxoc查看此代码的运行情况。.GCC说getFoo()+getBar()正在从int缩小到shortint。是什么导致向上转换为int?除