-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文字 次の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 に答える