【发布时间】:2021-11-25 16:24:55
【问题描述】:
在我的 C++ 程序中,我使用两种类型的构建。一种是没有调试信息的优化构建 (gcc -O3 ),另一种是具有调试信息的优化构建 (gcc -ggdb -O3 )。在我的程序中,我使用 dlopen ("library_name", RTLD*) 来加载一些共享库。这些共享库也有相同的两个版本。
现在我的问题是我是否可以在我的代码中找到 -ggdb 选项是否包含在构建中,以便我可以执行以下操作。
if (with_debug_info_build)//Need some way to identify whether -ggdb is provided
{
void* h = dlopen("my_library.od.so", RTLD*);//Load library with debug info
}
else
{
void* h = dlopen("my_library.so", RTLD*);//Load library without debug info
}
非常感谢您在这方面的帮助。谢谢。
【问题讨论】:
-
我认为在执行调试编译的二进制文件(或将其编译成二进制文件)时,将
LD_LIBRARY_PATH设置为指向调试编译的库路径会更好。如果您开始在代码中进行这些检查,您的调试版本将开始偏离最终的二进制文件。注意:您可以检查#ifdef NDEBUG/* release build */#else/* debug build */#endif -
这是一个不错的选择,泰德。尽管在我的情况下使用调试信息进行了优化也定义了 ndebug,但我也可以使用单独的宏。谢谢!
-
不客气!请注意,我提到了一些你可以这样做,但我建议不要这样做,而是通过@为二进制文件提供不同的环境来管理加载的库987654328@。它会更容易维护,并且不会用
#ifdefs 混淆你的代码。
标签: c++ gcc shared-libraries