(私はWindows上でです。)私はこのように見えるCプログラムで私がコンパイルしたDLL(libsox)をテストしていなぜ「定義されていない参照」とは常に言いますか?
:
#include <stdio.h>
#include "sox.h"
int main(void) {
char const * versionText = sox_version();
printf(versionText);
return 0;
}
機能DLLで定義されています(これの何かがcdecl
が含まれています)sox.h
で、次のプロトタイプを持っている:
LSX_RETURN_VALID_Z LSX_RETURN_PURE
char const *
LSX_API
sox_version(void);
ここで問題です:私はgcc -lsox -o test.exe test.c
でファイルを構築しようとした際、私は、次のERを取得ROR:-lsox
へ
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ののlib
フォルダ内のライブラリファイル "libsox.dll.a" を持っています。私が-lsoxnonsense
と書くと、ライブラリがないと言います。これは、示されたケースではライブラリを見つけることを意味します。それではなぜリンクを作成したくないのですか?
同じコンパイラでそのライブラリをビルドしましたか?シンボル名の前に '_'が付加されることがあります。 –
はい、同じコンパイラでした。オブジェクトファイルと.aファイルに_sox_versionの両方が含まれていると思います。 – rynd