无法从静态库通过 std::cout 输出

发布于 2024-10-18 07:15:20 字数 405 浏览 4 评论 0原文

我正在链接一个静态库,该库具有一个 std::cout 包装器,如果我从应用程序代码中使用它,该包装器就可以工作,但库的内部输出(以完全相同的方式使用)不会显示任何内容输出。

也许这并不重要,但我正在使用 Qt Creator 和 qmake 项目文件来构建。我已将控制台添加到应用程序的 CONFIG 中(甚至尝试了静态库,但没有效果)。

可能出了什么问题,我该如何解决这个问题?谢谢!

更新:嗯,包装器是 这个

I'm linking a static library that has a std::cout wrapper that works if I use it from the application code, but non of the library's internal outputs (used in exactly the same fashion) show any output.

Maybe it's not important, but I'm using Qt Creator and qmake project files to build. I have added console to the application's CONFIG (and even tried that for the static library, but it had no effect).

What could be going wrong and how can I fix this? Thanks!

UPDATE: well, the wrapper is an adapted version of this one:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

弄潮 2024-10-25 07:15:20

std::cout 包装器将无法隐式“访问”另一个库。您是否考虑过完全重定向 cout ?类似src

int main() { 
    std::streambuf* cout_sbuf = std::cout.rdbuf(); // save original sbuf 
    std::ofstream   fout("cout.txt"); 
    std::cout.rdbuf(fout.rdbuf()); // redirect 'cout' to a 'fout' 
    // ... 
    std::cout.rdbuf(cout_sbuf); // restore the original stream buffer 
}

这样,您就可以控制输入到 std::cout 的数据,而不管执行输出的库是什么(当然,除非它们重定向 std::cout > 他们自己。)

The std::cout wrapper won't be able to 'reach in' to another library implicitly. Have you thought about redirecting cout altogether? Something likesrc:

int main() { 
    std::streambuf* cout_sbuf = std::cout.rdbuf(); // save original sbuf 
    std::ofstream   fout("cout.txt"); 
    std::cout.rdbuf(fout.rdbuf()); // redirect 'cout' to a 'fout' 
    // ... 
    std::cout.rdbuf(cout_sbuf); // restore the original stream buffer 
}

That way you'd have control over data fed to std::cout, regardless of the library doing the output (unless, of course, they redirect std::cout themselves.)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文