0

我目前正在使用 PyCUDD,它是 SWIG 为 C 包 CUDD 生成的 Python 包装器。我目前正在尝试让 CUDD 从 C 代码中打印一些调试信息,但是 C 代码中的任何 printfs 似乎都不会产生任何输出 - 将它们放在 .i 文件中以供 SWIG 产生输出,将它们放在在 C 代码中没有。我不确定这是 SWIG 的特定属性还是将 C 代码编译为共享对象库的属性。

(特别令人沮丧的是,我知道我曾经遇到过这个问题并且之前已经解决了这个问题,但我现在似乎找不到任何东西来搜索这个问题,而且我显然忘了在那件事上留下笔记。)

4

2 回答 2

0

我认为问题是启动程序关闭(或将原始标准输出处理程序/描述符重定向到某处)标准输出,因此库无法获取处理程序/描述符。所以我试图恢复设备并重新打开。

在 linux 中,控制台设备位于 /dev/stdout(它是指向特定设备或启动时位于 fd 1 中的文件的符号链接),因此重新打开此文件并恢复文件描述符。

int fd = open("/dev/stdout", O_RDONLY);
if(fd != -1)
    dup2(fd,1);

在 Windows 中,如果当前进程没有控制台,AllocConsole 会尝试创建新的控制台。这适用于 PyCUDD(或任何程序)使用自定义控制台的情况。并且 freopen 使我们分配的控制台可写,因此 printf 将适用于新控制台。

AllocConsole();
freopen("CONOUT$", "w", stdout);
于 2018-01-02T18:06:31.863 回答
0

I still forget what my problem was before. However, I have found that what was causing my problem here was a linker issue - the linker was looking at an old version of the library, which did not have my changes.

于 2018-02-07T19:37:13.447 回答