草庐IT

c++ - g++ - 使用 "-g"标志进行生产是一个好主意吗?

只是为了提供一些上下文,我在这里谈论的是使用g++编译C++代码。我可以看到在生产构建中包含-g标志将如何方便维护:如果程序意外崩溃,调试起来会容易得多。我的问题是,包含-g标志是否会以任何其他方式影响输出可执行文件,而不是增加其大小?它能否以某种方式使代码变慢(例如通过关闭某些优化)?据我了解,它不应该(文档只提到包含调试符号),但我不确定。 最佳答案 -g标志不影响代码生成,仅更改符号表和调试元数据。这些并不存在于可执行代码部分,因此当代码在hte调试器之外运行时,它们甚至不会影响性能。

c++ - 用 g++ 链接 opencv 库

您好,我正在尝试编译取自该网站的c++文件:http://opencv-code.com/tutorials/eye-detection-and-tracking/用于眼动追踪。但我对此有点陌生,我真的不明白图书馆是如何链接的。我知道包含头文件的绝对路径位于/user/include/opencv2中。如何在gcc命令行(ubuntu)中链接它?我试过这个命令:$g++-Walleye-tracking.cpp-oeyeTracking看来我还需要链接其他库。我尝试使用此命令链接找到的那些:$pkg-config--libsopencv但在这里我不知道如何将输出链接到我的命令。我通过输

c++ - g++ 未报告未实例化模板中的某些错误

考虑这个例子:classA{voidfoo();public:voidbar();};templateclassB{B(){Aa;a.foo();//1A::bar();//2a.bar(1);//3}};注意B永远不会被实例化。clang++将所有三个标记的行报告为错误。g++(4.8.3)接受行1和2并且只报告行3。如果B被实例化,g++很高兴将所有三行报告为错误。这是一个g++错误吗?有人会这么认为。A不是依赖名称,应在模板定义时正常检查其成员。有我看不到的细微差别吗? 最佳答案 这些预实例化消息不是由标准强制执行的,而是由编

c++ - 在 g++ 中链接文件

最近我尝试用g++(在Ubuntu上)编译一个程序。通常我使用Dev-C++(在Windows上),只要我制作一个项目并将所有必要的文件放在那里,它就可以正常工作。编译程序时出现的错误是:$filename.cpp:undefinedreferenceto'[Class]::[ClassMemberFunction]'用到的文件如下:带有main函数的源代码(.cpp)文件。带有函数原型(prototype)的头文件。包含每个函数定义的.cpp文件。任何帮助将不胜感激。 最佳答案 您可能尝试编译和链接而不是只编译源文件,或者不知何故

c++ - 使用 g++ 从 cpp 文件和静态库创建共享库

这个问题在这里已经有了答案:howtolinkstaticlibraryintodynamiclibraryingcc(2个回答)关闭7年前。正如标题所说,我想从三个cpp文件和一些静态库创建共享库。基本上我想这样做g++libProject.sofile1.cppfile2.cppfile3.cpp-I/usr/local/include-L/usr/local/lib-lAlgatorc这是我的file1.cpp:#include#includeclassSortingTestSetIterator:publicTestSetIterator{public:TestCase*get

c++ - 使用 g++ 编译动态共享库

我正在尝试从Program-Library-HOWTO编译以下简单的DL库示例代码与g++。这只是一个示例,因此我可以学习如何使用和编写共享库。我正在开发的库的真实代码将用C++编写。#include#include#includeintmain(intargc,char**argv){void*handle;double(*cosine)(double);char*error;handle=dlopen("/lib/libm.so.6",RTLD_LAZY);if(!handle){fputs(dlerror(),stderr);exit(1);}cosine=dlsym(handl

c++ - 当我使用 g++ 使用 -pg 标志编译时,未创建 gmon.out

我在MacOSX版本10.8.5(MountainLion)上运行。我有以下简单的C++代码。main.cpp:#includeintmain(){std::cout我正在尝试让gprof在我的计算机上工作。作为manual建议,我在终端中输入以下两行:g++-g-pgmain.cpp-oa.out./a.out然而,这并没有像预期的那样生成gmon.out文件。当我尝试在终端中输入gprof时,它会说:gprof:can'topen:gmon.out(Nosuchfileordirectory)这是意料之中的,因为gmon.out不存在...关于我做错了什么有什么想法吗?编辑:其他一

c++ - g++ 中共享 C++ 库之间的异常

据我所知,在C++STD中未定义(未定义行为)当一个共享库在另一个[共享库]中引发异常时,编译的应用程序应如何处理情况。G++/Linux生成的代码表明共享库之间可以引发异常。我的问题是:它是可移植的(MSVS)吗?在哪些情况下共享库A将无法处理来自共享库B的异常?[我的意思是应用程序会崩溃;A库知道B]可能存在的异常。我的示例中的异常处理行为是否取决于链接器? 最佳答案 这实际上取决于您对共享库的使用。如果您将它们用作同一应用程序/系统中的物理模块并使用相同的编译器编译它们,您应该没问题(只要您还动态链接到C++标准库)。但是,如

c++ - 使 : g++: Command not found

我查看了类似的帖子,有人解决了我的问题。我很简单,但我是eclipse的新手。我正在尝试做一个简单的例子,我遇到了这个问题。make文件就是这个all:hello.execlean:rmHello.oHello.exehello.exe:hello.og++-g-ohello.exehello.ohello.o:g++-c-gmain.cpp我得到这个错误“make:g++:Commandnotfound”感谢您的帮助。 最佳答案 您需要从GNU安装开发工具。我假设您在Windows上,在这种情况下您有两个选择:cygwin和min

c++ - 是否可以在编译 (g++) 之前使用实例化模板查看 C++ 代码?

g++编译器有一个生成宏扩展代码(-E)的标志,所以我想知道是否有办法在模板实例化之后在实际编译发生之前查看程序代码? 最佳答案 嗯,越接近阅读编译器生成的AST/ABT:AST:抽象语法树ABT:抽象绑定(bind)树前者代表编译器理解的语法View,后者类似于绑定(bind)的after解析(即,这里的a实际上是在3行之前声明的变量或foo对应于该header中定义的函数...)。Clang允许转储它的AST...实际上是ABT,实际上,它现在正在改进;偷偷开发者预览:intTest__attribute__((visibili