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 文档约定):
- 我用
rm -rf VLFEATROOT/bin
删除了二进制代码
- 我在
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
副本。删除后问题解决,消息打印正确
我正在尝试修改 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 文档约定):
- 我用
rm -rf VLFEATROOT/bin
删除了二进制代码
- 我在
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
副本。删除后问题解决,消息打印正确