-2

我面临 stat() 的问题。stat() 似乎不适用于 .so 文件。它给出了错误

No such file or directory .

为什么会这样?

根据要求,我粘贴了一部分代码:

int main()
 {
    char str[300];
    struct stat str_buf;
    strcpy(str,"path/to/my/library/libfuncs.so");

    if(stat(str,$str_buf)==-1)
       perror("stat");
     ....
  }

因此错误来自 stat No such file or directory

但相同的代码适用于其他文件和目录。libfuncs.so 是我生成的共享库。

4

2 回答 2

1

由于版本控制问题,许多“.so”文件实际上是符号链接。您可能希望lstat()在这些情况下使用来统计实际链接。

您得到的错误(“没有这样的文件或目录”)似乎暗示符号链接指向不存在的东西。在这些情况下,stat:ing 链接本身会有所帮助,但当然这可能不是您想要做的。检查链接的目标。如果链接中的路径是相对的,也许您正在从不同的目录执行代码?

于 2011-07-15T12:36:38.247 回答
0

可能的原因

我只能猜测这"path/to/my/library/libfuncs.so"并不真正存在。您可以简单地通过键入来测试它ls "path/to/my/library/libfuncs.so"

我很确定

stat( )不起作用

我想这再次解决了一个非常完善的库中的“错误”。


理论上可能的原因。

$用于变量名。这是不允许的。C99 标准对此有这样的说法:

基本源字符集和基本执行字符集都应具有以下成员: 拉丁字母的 26 个大写字母 拉丁字母 的 26 个小写字母 10 个十进制数字 以下 29 个图形字符
A B C D E F G H I J K L M
N O P Q R S T U V W X Y Z



a b c d e f g h i j k l m
n o p q r s t u v w x y z



0 1 2 3 4 5 6 7 8 9


! " # % & ' ( ) * + , - . / :
; < = > ? [ \ ] ^ _ { | } ~

更远:

如果 ...

在源文件中遇到任何其他字符(标识符、字符常量、字符串文字、标题名称、注释或从未转换为标记的预处理标记除外),

你猜怎么了?** 击鼓 **

行为未定义。

是的派对。但我认为这是第一个原因。

于 2011-07-15T12:52:08.583 回答