问题描述
库A使用库B
两个库都独立安装为共享库,并且使用CMake软件包将A链接到B。
当我创建一个直接链接到B的可执行文件时,一切正常。 当我创建一个使用B链接到A的可执行文件时,由于某种原因,我在B中的fstream无法打开特定文件。我100%确定该文件存在,不需要授权并且当前未使用。 strerror(errno)引发的错误是“没有这样的文件或目录”。
我真的不知道可能出什么问题。这是我用来打开的代码片段:
ifstream f;
f.open(filename.c_str(),ios_base::in|ios::binary);
if (f.fail()) {
std::cout << "opening Vocabulary Failed: " << std::strerror(errno) << std::endl;
return false;
}
我三次检查了文件名中的路径是否正确。这些是我能想到的不得已的方法:
还有什么我可以检查的吗?
编辑:啊,我忘了一件事:fstream命令在头文件的模板函数中。也许与此有关吗?
Edit2:这是堆栈跟踪。 “ ORBVoc.bin”是我要打开的文件。我从中得到的唯一信息是,它不存在...尽管确实存在。
https://www.file-upload.net/download-14359408/strace.log.html
解决方法
好吧,很明显,重新启动就足够了。如今,一切正常。没有权限,文件或代码行已更改。当我的笔记本电脑从休眠状态恢复时,我认为这两种情况都出了问题。还是有人在等待Ubuntu更新?我真的不知道。我可以发誓,过去2-3天至少关闭了一次。但是,我没有其他解释。也许更聪明的人可以用他的玻璃球来回答这个问题……
无论如何,感谢您的回答,不胜感激!至少我了解了strace $:^)