1

(私はWindowsを使用しています。)

コンパイルしたDLL(libsox)を次のように見えるCプログラムでテストしています。

#include <stdio.h>
#include "sox.h"

int main(void) {
    char const * versionText = sox_version();
    printf(versionText);
    return 0;
}

DLLで定義されている関数には、次のプロトタイプがありますsox.h(これには次のものが含まれていますcdecl)。

LSX_RETURN_VALID_Z LSX_RETURN_PURE
char const *
LSX_API
sox_version(void);

問題は次のとおりです。でファイルをビルドしようとするとgcc -lsox -o test.exe test.c、次のエラーが発生します。

C:\DOKUME~1\ADMINI~1\LOKALE~1\Temp\ccSS2h2z.o:test.c:(.text+0xf): undefined reference to `sox_version'
collect2: ld returned 1 exit status

一言:MinGWのフォルダ-lsoxにライブラリファイル「libsox.dll.a」があります。libと書く-lsoxnonsenseと、ライブラリがないと書いてあります。つまり、示されているケースでは、ライブラリが見つかります。では、なぜリンクを作成したくないのでしょうか。

4

1 に答える 1

3
gcc -lsox -o test.exe test.c

ソースファイルを最初に配置する必要があります。

gcc test.c -lsox -o test.exe

これは、リンカーが入力ファイルを順番に調べて、未定義の参照を見つけ、以前に見た参照を満足させるためです。したがって、コマンドラインでは、読み取りlibsox.a(またはそのようなもの)で、未定義の参照が見つかります(何もありません)。次に、に移動し、test.cそこに未定義の参照が見つかりますが、それらを満たすライブラリは他にありません。

詳細については、この回答を参照してください。

于 2012-04-18T00:05:09.047 に答える