我正在使用一些第三方。我正在使用它的共享库版本,因为该库很大(~60MB)并且被多个应用程序使用。
有没有办法在应用程序启动时找出库的发布/调试版本分别用于我的应用程序的发布/调试版本?
更长的描述
公开 C++ 接口的库。 API 方法之一返回std::vector<std::string>
.
当我在调试模式下编译应用程序时出现问题,应该使用库的调试版本。发布时也一样。如果使用了错误版本的库,应用程序就会崩溃。
根据海湾合作委员会(参见http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt03ch17s04.html http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt03ch17s04.html)
但具有混合模式标准库
可以使用调试模式
或释放模式 basic_string 对象,
事情变得更加复杂
P.S. 1
看起来 Timbo 的提议是一个可能的解决方案 - 对调试和发布库使用不同的 soname。那么,应该将什么传递给 ./configure 脚本来更改库 soname?
P.S. 2
我的问题不是在链接时,而是在运行时。
P.S. 3
Here https://stackoverflow.com/questions/4836344/stdvectorstdstring-crash这个问题展示了我面临的问题。
引用的调试模式here http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt03ch17s04.html has nothing与应用程序的调试或发布版本有关。 STL 调试模式通过以下命令激活-D_GLIBCXX_DEBUG
并且是一种特殊的检查模式。
第三方库实际上不太可能是使用 STL 检查模式编译的,但如果是的话,它很可能会立即提到您的代码也应该使用-D_GLIBCXX_DEBUG
.
如果第 3 方库不是通过检查 STL 构建的,那么无论您是进行优化构建还是调试构建,它都与您的代码兼容。
由于您声明与第 3 方库的优化构建链接的代码的调试版本会导致崩溃,因此该崩溃很可能是由代码中的错误(或者可能是第 3 方库中的错误)引起的。
Valgrind 和 GDB 是你的朋友。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)