fstream 无法打开文件

fstream fails to open file

我有一个很奇怪的问题。设置如下:

图书馆 A 使用图书馆 B

两个库都作为共享库独立安装,A 使用 CMake 包链接到 B。

当我创建直接链接到 B 的可执行文件时,一切正常。 然而,当我创建一个链接到 A 的可执行文件时,它正在使用 B,然后由于某种原因,我在 B 中的 fstream 无法打开特定文件。我 100% 确定该文件存在,不需要授权并且当前未使用。 strerror(errno) 抛出的错误是“No such file or directory”。

我真的不知道哪里出了问题。这是我用来打开的代码片段:

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 $:^)