草庐IT

c++ - 如何在 CMake 中指定链接类型?

在我的CMake脚本中,我需要为我的项目链接的不同库指定gcc的不同类型链接。众所周知,使用-Wl,-Bstatic和-Wl,-Bdynamic选项进行此类混合。但是是否可以在cmake脚本中以某种方式指定它? 最佳答案 我们使用几个宏来调整CMake在Linux/MacOSX上的首选搜索顺序,以在动态和静态链接库之间切换macro(prefer_static)if(NOTWIN32)list(REMOVE_ITEMCMAKE_FIND_LIBRARY_SUFFIXES".a")list(INSERTCMAKE_FIND_LIBRA

c++ - 'long long long' 对于使用 log4cpp 的 GCC 来说太长了

我正在开发一个使用日志库log4cpp的QT应用程序。但是现在,在包含log4pp的头文件的地方,我得到了这个编译错误:'longlonglong'对于GCC来说太长了当我找到这个错误的根源时,头文件stdint.h在这一行打开:__MINGW_EXTENSIONtypedeflonglongint64_t;有人能告诉我如何处理吗? 最佳答案 好的,解决了,我只需要在开始时包含stdint.h 关于c++-'longlonglong'对于使用log4cpp的GCC来说太长了,我们在Sta

c++ - Linux gcc 和 Windows Visual Studio 处理静态常量的区别?

我们一直在Linux(gcc)和Windows(VisualStudio)上编译一个库,正如预期的那样,发现在两个平台上获得干净编译所需的东西之间存在细微但不显着的差异。今天,我将gcc编译器标志更改为使用-fPIC(以启用共享库)。当我们测试将程序链接到库时,我们开始出现错误(第一次),undefinedreference指向2个在头文件中声明和初始化的静态常量(但不在.cpp中文件)。我找到了thisStackOverflowanswer这似乎解决了这个问题,解释说,即使staticconst在头文件中初始化,它仍然需要在代码文件中定义。进行该更改确实消除了gcc链接器错误。但是,

c++ - 函数模板中的 lambda 闭包类型和默认参数

根据[expr.prim.lambda],以下代码似乎没问题:#includetypedefint(*func1)(int);typedefstd::functionfunc2;intfunction(int){return0;}templateintfunction1(Ff=function){return0;}templateintfunction2(Ff=function){return0;}templateintfunction3(Ff=[](inti){return0;}){return0;}templateintfunction4(Ff=[](inti){return0;}

c++ - 围绕可由 C 链接器链接的 C++ 库创建 C 包装器

按照对thisquestion(DevelopingCwrapperAPIforObject-OrientedC++code)的回答我设法为我的C++代码编写了一个C包装器。我想将我的包装器编译并链接到一个静态库(使用g++编译),该库只能使用gcc(而非g++)使用、编译和链接。这样库的用户就不必关心库是用C++编写的。这有可能吗? 最佳答案 此链接解释了一些编译器选项和场景:http://docs.oracle.com/cd/E19422-01/819-3690/Building.Libs.html具体来说:>16.7Build

c++ - 标准库头层次结构

跟进我对这个问题的回答:SIGSEGVondeclaration在这个问题中,提问者遇到了一些简单代码的段错误问题。事实证明,它甚至没有为我和其他人编译。GCC(4.8.1)由于重新声明名称为bsearch的变量而出错,该名称恰好与std中的函数名称相同。这导致了冲突,因为代码还使用了usingnamespacestd;。由于提问者接受了我的回答,我猜这与运行时错误有某种关系(虽然很奇怪)。然而,提问者说代码可以在代码块上正常编译,其他人也证实了这一点。bsearch应该在cstdlib中定义,但代码中没有包含它。事实证明,gcc包含cstdlib,如果iostream无论如何都包含在

c++ - 禁用关于 "underscore-prefixed user-defined literals"的 GCC 警告

我的一个客户有很多代码使用了“ui64”、“ui32”等...后缀,我需要移植它。为了避免验证几个正则表达式查找+替换的可能漫长的夜晚,我将所述后缀重现为用户定义的文字。我正在寻找“-Wno-xxx”标志,用于作为结果弹出的“前面没有‘_’”警告。我搜索了警告列表here,但我的大脑目前正遭受相当严重的字母汤综合症,所以我可能错过了。我使用的是cygwin附带的g++4.8.2。 最佳答案 我相信您正在寻找-Wno-literal-suffix。从gcc-7开始(见此处liveongodbold),这个选项也是turnsoffwar

c++ - 如果将某个符号的名称用作 STL 容器的元素,为什么我不能隐藏它?

根据answer,我通过使用标志-fvisibility=hidden和构建工具链中的命令strip隐藏了共享库的大部分内部符号。但我发现一些用作标准C++容器元素的符号无法隐藏。例如,/*example1.cpp*/#include#defineMY_EXPORTS__attribute__((visibility("default")))extern"C"{MY_EXPORTSvoid*create();MY_EXPORTSvoiddosth(void*,inti);MY_EXPORTSvoidrelease(void*);}classPoint{public:intx;inty;

c++ - 阻止编译器优化的多态性示例?

不记得我现在在哪里看到它-但我在某处读到动态多态性阻止编译器进行各种优化。除了内联之外,有人可以用多态性阻止编译器进行的此类“错过”优化机会的任何示例来启发我吗? 最佳答案 与:Derivedd;d.vMethod();//thatwillcallDerived::vMethodstatically(allowinginlining).使用(除非Derived或Derived::vMethod之一在C++11中被声明为final):voidfoo(Derived&d){d.vMethod();//thiswillcallvirtua

c++ - 在分析代码时,我应该使用匹配的 (gcc) 编译器优化标志吗?

我正在使用-O3在编译代码时,现在我需要分析它。对于分析,我遇到了两个主要选择:valgrind--tool=callgrind和gprof.Valgrind(callgrind)文档状态:AswithCachegrind,youprobablywanttocompilewithdebugginginfo(the-goption)andwithoptimizationturnedon.但是,在C++optimizationbook由AgnerFog撰写,我已阅读以下内容:Manyoptimizationoptionsareincompatiblewithdebugging.Adebug