gpt4 book ai didi

c++ - STL 和发布/调试库一团糟

转载 作者:IT王子 更新时间:2023-10-29 00:11:53 24 4
gpt4 key购买 nike

我正在使用一些第 3 方。我正在使用它的共享库版本,因为该库很大 (~60MB) 并且被多个应用程序使用。

有没有办法在应用程序启动时找出库的发布/调试版本分别用于我的应用程序的发布/调试版本?

更长的描述

公开 C++ 接口(interface)的库。 API 方法之一返回 std::vector<std::string> .

当我在 Debug模式下编译我的应用程序时出现问题,应该使用库的调试版本。发布也一样。如果使用了错误版本的库,应用程序将崩溃。

根据 gcc(参见 http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt03ch17s04.html)

but with a mixed mode standard library that could be using either debug-mode or release-mode basic_string objects, things get more complicated

附言1

看起来 Timbo 的提议是一个可能的解决方案——对调试和发布库使用不同的 soname。那么,应该将什么传递给 ./configure 脚本来更改库 soname?

附言2

我的问题不在链接时,而是在运行时。

附言3

Here是展示我面临的问题的问题。

最佳答案

Debug模式引用 here与应用程序的调试或发布版本没有关系。 STL Debug模式用-D_GLIBCXX_DEBUG激活,是一种特殊的检查模式。

第 3 方库实际上不太可能是使用 STL 检查模式编译的,但如果是,它很可能会很快提到您的代码也应该使用 -D_GLIBCXX_DEBUG 编译。

如果第 3 方库不是通过检查 STL 构建的,那么无论您是在进行优化构建还是调试构建,它都与您的代码兼容。

由于您声明代码的调试版本与第 3 方库的优化版本相关联会导致崩溃,因此该崩溃很可能是由代码中的错误(或可能是由第 3 方库中的错误)引起的。

Valgrind 和 GDB 是您的 friend 。

关于c++ - STL 和发布/调试库一团糟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4764048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com