printf() 在源代码中不起作用?

printf() doesn't work in source code?

我正在尝试修改 VLFeat source code in particular the function vl_vlad_code in this 文件。现在,由于这是我第一次编辑此类库的源代码,所以我从一些简单的事情开始,比如打印一个 Hello World!在函数的开头:

void
vl_vlad_encode (void * enc, vl_type dataType,
                void const * means, vl_size dimension, vl_size numClusters,
                void const * data, vl_size numData,
                void const * assignments,
                int flags)
{
  printf("Hello World!");
...

然后(遵循 this 文档约定):

  1. 我用 rm -rf VLFEATROOT/bin
  2. 删除了二进制代码
  3. 我在 VLFEATROOT 中用 make 重新编译了库(没有错误)

但是,当我从我的应用程序调用 vl_vlad_code 时,没有任何打印。 请注意 该库在我的 C++ 应用程序中运行良好,它只是 "ignores" 我的更改。

为了完整起见,我使用 Ubuntu 16.04,这是我在 Eclipse CDT 项目中使用的关于 VLFeat 的编译选项:

... -I/home/luca/vlfeat ... -L/home/luca/vlfeat/bin/glnxa64 ... -lvl

更新: 按照评论中的建议,我尝试以这种方式向文件写入内容:

void
vl_vlad_encode (void * enc, vl_type dataType,
                void const * means, vl_size dimension, vl_size numClusters,
                void const * data, vl_size numData,
                void const * assignments,
                int flags)
{
    FILE *f = fopen("/home/luca/file.txt", "w");
    if (f == NULL)
    {
        printf("Error opening file!\n");
        exit(1);
    }
/* print some text */
const char *text = "Write this to the file";
fprintf(f, "Some text: %s\n", text);

没有创建文件!

当您 运行 应用程序时,您实际上可能正在与系统范围内安装的库链接。作为测试,尝试将构建库的目录添加到 LD_LIBRARY_PATH 环境变量,然后 运行 您的程序。

您可以从命令行执行以下操作:

export LD_LIBRARY_PATH=/path/to/your/lib:${LD_LIBRARY_PATH}

如果您使用的是 IDE,您应该在其环境设置中设置变量。

将在搜索系统库之前搜索此变量中的路径。

您始终可以通过 运行ning:

找到您的可执行文件链接到的库的确切位置
ldd /path/to/your/executable

问题出在 /usr/loca/lib 中的 libvl.so 副本。删除后问题解决,消息打印正确