标签: compiler-flags

-fno-某些库的例外?

这有点类似于“禁用 C++ 异常,如何使任何 std:: throw() 立即终止? ”。我希望每当 STL 抛出异常时我的程序就终止。

问题如下:我正在编写一个库,然后将其作为共享对象加载并由我无法控制的程序执行。不幸的是,这个程序在一个大的尝试块中运行所有内容,这样如果抛出错误,我就不会得到堆栈跟踪/核心转储,从而使::at函数类的超出范围错误变得无用。

这听起来像是 -fno-exceptions 的理想用例,但我不能只使用 -fno-exceptions,因为 boost_log 和调用我的程序都在其标头中定义了异常处理,从而给我带来了 -fno-exceptions 的编译错误。

有没有办法只对 stl 异常启用 -fno-exceptions ?

c++ stl g++ exception compiler-flags

5
推荐指数
1
解决办法
1066
查看次数

如何将 gcc 警告转储为结构化格式?

像许多人一样,我使用大量警告标志构建我的项目。
由于并非所有警告标志都是有害的,因此编译会变得嘈杂。

诸如“未使用的变量”、“初始化列表中的隐藏成员”、“缺少开关默认值”等警告都很重要,但它们在构建过程中会造成太多混乱,并且很难发现重要的警告。

给定一个大型项目,可能会有数以千计的警告与构建语句混合在一起,尽管之后解析它会变得很繁重。在代码中维护编译器编译指示和推送/弹出警告同样是不可取的。

如何以结构化格式转储编译器警告?
无论是 XML、JSON、YAML、CSV,有没有办法告诉编译器转储所有发出的警告?这样的格式可以让我更有效地查看警告,并按类型、文件、数量等对它们进行排序。

c++ gcc g++ compiler-flags compiler-warnings

5
推荐指数
2
解决办法
1837
查看次数

gcc -u 符号编译器选项

我们什么时候使用 gcc -u 编译器选项?您也可以举个例子吗?

https://gcc.gnu.org/onlinedocs/gcc-2.95.2/gcc_2.html 内容如下:

假装符号symbol未定义,以强制链接库模块来定义它。您可以多次使用带有不同符号的“-u”来强制加载其他库模块。

c gcc compiler-flags

5
推荐指数
1
解决办法
3401
查看次数

如何根据具有相对位置的共享库构建 nodejs C++ 插件

我正在尝试构建一个 node.js C++ 使用,node-gyp但无法弄清楚如何指定,-Wl,-rpath,$ORIGIN以便从 node 加载时它可以找到与addon.node.

我试过这样设置我的binding.gyp

"libraries": [
          "-L../../install_release_x64/",
          "-llibppp"
        ],
        "ldflags": [
          "-Wl,-rpath,'$ORIGIN'"
        ],
        "cflags_cc": [
          "-fexceptions",
          "-fPIC",
          "-Wno-unknown-pragmas"
        ]
Run Code Online (Sandbox Code Playgroud)

但是当我运行时$ readelf -d addon.node,结果是这样的:

 Dynamic section at offset 0x7d10 contains 29 entries:
Tag        Type                         Name/Value
0x0000000000000001 (NEEDED)             Shared library: [liblibppp.so]
0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
0x000000000000000e (SONAME)             Library soname: [addon.node]
0x000000000000000f (RPATH)              Library rpath: [RIGIN]
0x000000000000000c (INIT)               0x37a0 …
Run Code Online (Sandbox Code Playgroud)

gcc compiler-flags node.js node-gyp node-modules

5
推荐指数
1
解决办法
1936
查看次数

从 GCC 切换到 Clang 的常见问题是什么?

假设我的 C++ 符合标准并且我不依赖第三方库,那么在将 makefile 中的“g++”替换为“clang++”时遇到的常见陷阱是什么?像不兼容的编译器选项、选项顺序的不同要求、其他一些限制等。

gcc g++ clang compiler-flags clang++

5
推荐指数
1
解决办法
2530
查看次数

为什么 clang 会抱怨使用带有“-std=c99”标志的可变长度数组?

当我编译这个实验代码时:

int main(void)
{
    int foo = 5;
    char bar[foo];
}
Run Code Online (Sandbox Code Playgroud)

使用 clang 和'-Weverything'单独的'-Wvla'标志或单独的标志与标志相结合'-std=c99',我仍然收到警告:

警告:使用可变长度数组 [-Wvla]

示例在这里

尽管与后来的 C 标准(C11、C18 等)相比,符合 C99 的实现将无一例外地支持可变长度数组,其中 VLA 支持是可选的。


  • 为什么我在使用带有'-std=c99'clang 标志的 VLA 时仍然收到此警告?
  • 这是一个错误还是只是为了提示注意遵守符合后来的 C 标准(以及 C89/C90)的实现?

c c99 clang compiler-flags

5
推荐指数
2
解决办法
740
查看次数

MSVS C++,如何使用*.i扩展名编译已经预处理的文件?

相关问题: 如何在两个单独的步骤中运行MSVC预处理器和编译器?

我明确地预处理MyFile.cpp(不编译)到a MyFile.i.我想稍后"编译"该文件(显式跳过预处理会很好,但正如相关问题所示,听起来这对MSVS来说是不可能的.)

问题:这MyFile.i是一个"无法识别的扩展",并cl.exe假设它是一个"目标文件",导致"无操作".(请参阅Microsoft警告:http: //msdn.microsoft.com/en-us/library/zfsbakc5(v = VS.90).aspx,此警告对MSVS 2005,2008,2010有效).

我找不到一个开关来声明它是一个"源文件"(不是目标文件).相关问题明确使用了" MyFile_preprocessed.cpp"惯例,但我真的宁愿遵守(更普遍的)MyFile.i惯例.

问题:是否有可以MyFile.i用MSVS 编译的标志?

c++ compiler-construction compiler-flags visual-c++ c-preprocessor

4
推荐指数
1
解决办法
1049
查看次数

对错误进行特定的gcc警告

所以我知道我可以使用-Werror = ...将警告变成错误但是我想将以下警告变成错误:

"类xxx具有虚函数但非虚析构函数"

我知道你可以得到这个错误的唯一方法是打开过度讨厌的-Weffc ++标志.有没有办法(或者这个警告的-Weffc ++中的子标志)只打印此警告然后将其变成错误?

谢谢!

c++ gcc warnings compiler-errors compiler-flags

4
推荐指数
1
解决办法
620
查看次数

如何使用-DN标志在g ++编译期间传递值

我听说你可以使用g ++的-DN标志在编译期间在c ++程序中设置值.任何人都可以解释一下吗?谢谢

gcc g++ compiler-flags

4
推荐指数
1
解决办法
5723
查看次数

Qt Creator/Linux:为动态库设置编译器/链接器选项-ldl

我全都用Google搜索了!感谢任何可以帮助我的人......

我已经构建了test.so并希望使用dlfcn.h中定义的dlopen(),dlsym()等动态调用它

可以在命令行上编译我的调用程序(main.cpp)而不会出错

g++ main.cpp -ldl -o myprog
Run Code Online (Sandbox Code Playgroud)

没有-ldl开关,我得到错误:undefined reference dlopen().此外,如果-ldl开关未放置在g ++参数列表中的源文件之后,那么我会得到相同的错误.

我的问题是:如何在Qt Creator中编译main.cpp?Qt Creator报告相同的错误:未定义的引用dlopen()

我试过直接将-ldl对Makefile(CFLAGS,CXXFLAGS,LFLAGS),但无济于事标志.(也许在源文件之前插入标志,其中-ldl不起作用?)

这是我的main.cpp:

#include <dlfcn.h>
int main()
{

   void* handle = dlopen("./test.so", RTLD_LAZY);

   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我在linux上使用Qt Creator 2.4.1

非常感谢 :)

c++ linux qt dynamic compiler-flags

4
推荐指数
1
解决办法
7549
查看次数