C++ c++;“中的分段错误”;“空的”;main(在非空项目中)
我一直在和一位同事开发一个应用程序,从CVS中提取最后一个版本后,它停止了工作。。。以一种有趣的方式 它开始产生一个分段错误(是的,这一点也不奇怪) 我正在寻找造成分割错误的人。我的问题是我似乎把范围缩小到。。。没有人 此时,主视图如下所示:C++ c++;“中的分段错误”;“空的”;main(在非空项目中),c++,segmentation-fault,runtime-error,C++,Segmentation Fault,Runtime Error,我一直在和一位同事开发一个应用程序,从CVS中提取最后一个版本后,它停止了工作。。。以一种有趣的方式 它开始产生一个分段错误(是的,这一点也不奇怪) 我正在寻找造成分割错误的人。我的问题是我似乎把范围缩小到。。。没有人 此时,主视图如下所示: //lots of commented includes int main(int argc, char** argv) { // some commented code exit(0); } 所以现在我基本上有: 一个相当长
//lots of commented includes
int main(int argc, char** argv)
{
// some commented code
exit(0);
}
所以现在我基本上有:
- 一个相当长的cmakelist.txt,包含相当多的类、外部库
- 一个用cmake生成的makefile,它允许我编译所有的东西而不必抱怨
- 一个空的主函数(至少在此时),没有包含
- 我已经检查过,我仍然可以使用CLION编译和运行hello world示例,因此没有重大的配置问题,我甚至可以编译和运行以前版本的代码
- 这两个版本之间的差异很大,但不包括新的外部库,只有一些我们自己开发的新类
- 我一直在研究这个问题,看起来来自包含类的静态创建者函数可能是个问题,但由于我没有包含,我相信我应该是安全的,对吗
提前感谢您的帮助。好吧,我设法解决了这个问题。我在这里发布了一些详细信息,以防对某人有所帮助 我正在使用使用boost的点云库。我试图重新安装这两个,但都没有成功。然后我决定改变PCL的版本,希望这能起到作用 我过去常常下载、编译和安装一个不同于ubuntu系统的PCL版本。这就解决了问题。但是,问题似乎不在库本身,而是在它的一些依赖项中 具体来说,我在尝试安装libflann1包时遇到了麻烦 我通过安装libflann-dev解决了这个问题 做了这些之后,我又回到了(目前是1.7.0),一切都很顺利 我仍然不知道为什么应用程序在这个特定的时刻失败,我猜代码开始使用一些影响未正确安装的部分的功能 总而言之,我了解到链接库(即使不包括它们)在初始化时会产生运行时分段错误,我从valgrind(感谢Dac Saunders!)那里得到了有问题的库的提示,并设法修复了一个错误的安装
现在回到编程上来,谢谢你的帮助 好吧,我设法解决了这个问题。我在这里发布了一些细节,以防对某人有所帮助 我正在使用使用boost的点云库。我试图重新安装这两个,但都没有成功。然后我决定改变PCL的版本,希望这能起到作用 我过去常常下载、编译和安装一个不同于ubuntu系统的PCL版本。这就解决了问题。但是,问题似乎不在库本身,而是在它的一些依赖项中 具体来说,我在尝试安装libflann1包时遇到了麻烦 我通过安装libflann-dev解决了这个问题 做了这些之后,我又回到了(目前是1.7.0),一切都很顺利 我仍然不知道为什么应用程序在这个特定的时刻失败,我猜代码开始使用一些影响未正确安装的部分的功能 总而言之,我了解到链接库(即使不包括它们)在初始化时会产生运行时分段错误,我从valgrind(感谢Dac Saunders!)那里得到了有问题的库的提示,并设法修复了一个错误的安装
现在回到编程上来,谢谢你的帮助 这也可以在编译/链接到程序中的其他cpp文件或库中。不仅包括文件。因此,如果你有一些全局/静态变量,这也会导致这种情况。调试器会指出故障的原因,所以gdb输出sigsegv消息并继续执行?真奇怪。gdb在其他程序中的行为是否应该如此?(试试
intmain(){*(int*)nullptr;}
或类似的东西。)你的问题与CMake或CLion有什么关系?请删除这些标记。您可以使用工具Valgrind调查segfault,然后您将获得实际行号。因此,我询问Valgrind,以下是输出结果:地址处映射区域的权限不正确。。。boost::math::lanczos::lanczos_初始值设定项::init::init()(在/usr/lib/libpcl_sample_.so.1.7.2中)由0xA64A6BD:???(在/usr/lib/libpcl_sample_consenses.so.1.7.2中)0x4010109:call_init.part.0(dl init.c:78)0x40101F2:call_init(dl init.c:36)0x40101F2:_dl_init(dl init.c:126)我想这是PCL和boost之间的问题,我现在检查一下。谢谢你的建议!这也可以在编译/链接到程序中的其他cpp文件或库中。不仅包括文件。因此,如果你有一些全局/静态变量,这也会导致这种情况。调试器会向您指出导致故障的原因