我正在使用一些第 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/