草庐IT

GCC_NO_COMMON_BLOCKS

全部标签

c++ - 为什么 clang++ 和 gcc/g++ 生成不同链接的可执行文件

当使用g++和clang++进行编译和链接时,期望生成的可执行文件的链接与它们的链接相同。然而,在某些情况下,尽管传入的参数相同,但clang++可执行文件似乎链接到比g++更多的库。这会导致功能差异,尤其是对于在加载和卸载时自动执行的动态链接库。为什么会这样? 最佳答案 事实证明,gcc在ubuntu--as-needed中默认启用了一项功能,这会导致gcc有效地忽略任何在链接项链中未引用其符号的库这可以在gcc中使用--no-as-needed标志禁用。或者,您可以发出-Wl,--as-needed作为clang++的第一个选项

c++ - 修改嵌套lambda中捕获的参数 : gcc vs clang?

从clang切换到gcc时,我遇到了一个奇怪的行为。clang编译成功,gcc报错。这是重现该行为的最小示例。我已经尝试使用c++14和c++17以及多个clang和gcc版本。谁在这里,clang还是gcc?structA{intvalue;};automakeCallback(constA&a){autocallback=[aCopy=a](inti){[aCopy,i]()mutable{aCopy.value=i;}();};returncallback;}编辑:将外部lambda更改为mutable,解决了gcc上的问题。 最佳答案

c++ - gcc 预编译 header 与 -c 选项的奇怪行为

短篇小说:我无法使用gcc-c选项使预编译头文件正常工作。长话短说:伙计们,我在Linux上使用gcc-4.4.1,在一个非常大的项目中尝试预编译头文件之前,我决定在简单的程序上测试它们。他们“有点工作”,但我对结果不满意,我确定我的设置有问题。首先,我写了一个简单的程序(main.cpp)来测试它们是否有效:#include#include#includeintmain(){return0;}然后我创建了预编译头文件pre.h(在同一个目录)如下:#include#include#include...并编译它:$g++-I.pre.h(创建了pre.h.gch)之后我测量了使用和不使

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++ "No appropriate default constructor available"

我想在不使用STL的情况下创建一个数组链表。但是,我在将数组传递到我的链接列表时遇到困难...编译时出现上面列出的错误。我需要如何将数组传递给链表?谢谢!(有问题的代码有**标记,如果测试请去掉)单链表.h#pragmaonce#ifndefSinglyLinkedList_h#defineSinglyLinkedList_h#includetemplatestructnode{Typevalue;node*next;};templateclassSinglyLinkedList{private:node*head;public:SinglyLinkedList();~SinglyLi

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

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

使用ST-Link烧录程序出现No target connected所有的解决方案

原因分析及解决办法:1)芯片供电不足,导致找不到芯片;【解决办法】用杜邦线或者usb线对芯片再次进行供电 2) ST-Link与单片机接线错误,或者接线不良; 【解决办法】按照下面的方式进行接线,并确保接线良好3.3V⬅➡3.3VGND⬅➡GNDSWDIO⬅➡SWDIOSWCLK⬅➡SWCLK3)SWD引脚被占用或者被禁用 【解决办法】此时可以有两种方法可以解决:按住RESET,并在点击烧录后立马放开,抢一个时间差,这个方法有一定概率会失败,可以多尝试几次;把BOOT0拉高,可以将芯片从系统存储器或者是内置SRAM中启动,这时候并不会运行闪存存储器的程序,那么SWD就没有被占用,烧录一个正常的

无法捕获NO_DATA_FOUND错误日志表中的错误表

当我传递一个输入参数时,我有一个存储过程。使用该输入参数,如果有NO_DATA_FOUND,那么我正在提高异常,试图将NO_DATA_FOUND错误存储在该错误日志表中,但我无法做到。请在下面找到我的代码,存储过程:createorreplaceproceduredumm_proc(p_opportunity_numbercct_opportunity.opportunity_number%type)asv_oppo_idvarchar2(50);l_messagevarchar2(50):=sqlerrm;l_codevarchar2(50):=sqlcode;beginselectoppo

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