我正在尝试修改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文件惯例):
rm -rf VLFEATROOT/bin
make
中使用VLFEATROOT
重新编译了库(没有错误)但是,当我从我的应用程序中调用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);
并且没有创建文件!
答案 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
的副本。删除后,问题解决了,邮件正确打印。