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

时间:2016-12-29 18:26:18

标签: c++ c vlfeat

我正在尝试修改VLFeat源代码,尤其是this文件中的函数vl_vlad_code。现在,因为这是我第一次编辑这样一个库的源代码,所以我从一些简单的东西开始,比如打印一个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. 我在make中使用VLFEATROOT重新编译了库(没有错误)
  4. 但是,当我从我的应用程序中调用vl_vlad_code时,不会打印任何内容。 注意,我的C ++应用程序中的库工作正常,它只是“忽略”我的更改。

    为了完整起见,我使用的是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);
    

    并且没有创建文件!

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

通过运行以下命令,您始终可以找到可执行文件链接到的库的确切位置:

ldd /path/to/your/executable

答案 1 :(得分:1)

问题是libvl.so/usr/loca/lib的副本。删除后,问题解决了,邮件正确打印。