1

*nux のソースで配布されているプログラムを Windows で試してみたかったのです。いくつかの C ソース ファイルとヘッダーを含む単純なプログラムです。

  1. 私はMingw/Msysを持っていて、最初に実行してコンパイルしようとしましたが、make残念ながら(.text+0x175): undefined reference to 'strsep'、Google検索によると、autotoolsなどの問題を示している可能性のあるあいまいなエラーが発生しましたが、それですべてです

  2. これは単純なプログラムであると述べたので、VS2008 でコンパイルしようとしましたが、コマンド ライン引数の解析に unix ヘッダー ファイルを使用していることがわかったので、そこでも何もできませんでした。

  3. Ubuntu ラップトップを起動し、すぐにプログラムをコンパイルし、すべて問題なくテストした後、バイナリを Windows Msys フォルダーにコピーしました。ファイルを実行できないため(もちろんMsysプロンプトの下で)、再び運が悪い-実行フラグがなく、Msysには使用不可chmodにする「機能」がありますchmod +x


アップデート:

これは、コンパイルしようとしているときに msys プロンプトから表示されるエラーです。

f77_diagram.c: In function 'handle_goto':
f77_diagram.c:57:4: warning: implicit declaration of function 'strsep' [-Wimplicit-function-declaration]
[...]
gcc  -o f77_diagram block.o do_loop.o f77_diagram.o if.o label.o \
                                  links.o parse_fortran.o
f77_diagram.o:f77_diagram.c:(.text+0x175): undefined reference to `strsep'
collect2: ld returned 1 exit status
4

2 に答える 2

1

これは、関数/変数 strsep が適切に初期化されなかったことを意味します。ほとんどの場合、リンク エラーです。おそらく、依存関係がインストールされていないことを意味します。エラーに関する詳細情報を投稿する必要があります。

ちなみに、Windows では Linux バイナリを実行できません。

エラーから判断すると、コンパイラが strsep 関数をサポートしていないようです。これに対処するには、おそらく次のように独自にコーディングする必要があります。

char *strsep(char **from, const char *delim) {
    char *s, *dp, *ret;

    if ((s = *from) == NULL)
        return NULL;

    ret = s;
    while (*s != '\0') {
        /* loop until the end of s, checking against each delimiting character,
         * if we find a delimiter set **s to '\0' and return our previous token
         * to the user. */
        dp = (char *)delim;
        while (*dp != '\0') {
            if (*s == *dp) {
                *s = '\0';
                *from = s + 1;
                return ret;
            }
            dp++;
        }
        s++;
    }
    /* end of string case */
    *from = NULL;
    return ret;
}

これがあなたが通過しなければならないプロセスです:

1- src ディレクトリでファイル f77_diagram.c を見つけます。

#include2-ステートメントの直後に上記のコードをコピーして貼り付けます。

3- メインの make ディレクトリでコマンド シェルに戻ります。

4-再実行./configure

5-再実行make

これでうまくいかない場合は、他にもいくつか試してみることができます。

于 2012-06-13T20:35:21.943 に答える