C++ -malign-double 编译器标志

标签 c++ shared-libraries compiler-flags memory-corruption

我需要一些有关 C++ 编译器标志的帮助。我正在使用一个库,它是从 Windows 到 Linux 的端口,必须使用 -malign-double 标志编译,“为了 Win32 兼容性”。据我了解,这意味着我也必须用这个标志编译我自己的代码吗?其他 .so 共享库怎么样,是否也使用此标志重新编译了它们?如果是这样,有什么办法解决这个问题吗?

我是一个 Linux 新手(和 C++),所以即使我尝试重新编译我在我的项目中使用的所有库,递归地找到所有库的源代码和它们的库也太复杂了'依赖并重新编译一切。

编辑: 感谢您的回答。一些背景:这个库控制初始化和访问 USB 连接的相机。问题是如果没有这个标志,奇怪的事情就会开始发生。看似随机,相机初始化失败,USB连接错误。我还得到了堆栈上的几个 c 字符串 (const char*) 的某种内存损坏。基本上,在我调用这个相机的初始化之前,它们指向一个目录路径;初始化后,它们指向字符串“me”。这让我很困惑。

最佳答案

这是一个很棒的旗帜名称!我想知道是否还有-malign-influence?但严重的是,这个标志控制了一个轻微的优化:

-malign-double

-mno-align-double

Control whether GCC aligns double, long double,and long long variables on a two word boundary or a one word boundary.Aligning double variables on a two word boundary will produce codethat runs somewhat faster on a ‘Pentium’ at the expense of more memory.

库或您的代码不太可能需要此标志。通常,您不应该使用对齐控制标志,除非您确切地知道自己在做什么。如果您确实觉得需要使用它们,请参阅 GCC 手册,网址为 http://gcc.gnu.org/onlinedocs .

关于C++ -malign-double 编译器标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457182/

相关文章:

c - 如何使共享库成为可执行文件

c - gdb 远程调试 - 进入共享库时程序崩溃

gcc - 内置的grep比Linux随附的grep慢

c++ - 如何设置 CmakeList 标志

python - 无法使用 C 编译 python 包。错误 2 - 无法打开包含文件 : 'alloca.h' ?

c++ - 类模板的公共(public)继承意外失败

c++ - 在共享库中使用 std::thread 会导致 SIGSEGV

java - Ant .NET 库文档? (设置控制台记录器参数)

c++ - 将 HBuf 传递给函数

c-preprocessor - 覆盖 CPP 输出中的行标记文件名