私が取り組んでいるプロジェクトプロジェクトでは、オーディオファイル(少なくともWAVファイル)からコンテンツを開いて読み込めるようにする必要があります。私はmega-nerd.comのWin64インストーラを使用してlibsndfileをインストールし、ライブラリをテストするためのオーディオファイルを開いたり閉じたりする簡単なCプログラムを作成しました。libsndfileにリンクするときの未定義参照と不正なリロケーションアドレス
#include <stdio.h>
#include <sndfile.h>
int main()
{
SNDFILE *sndfPtr;
SF_INFO soundfileInfo;
char path[] = "C:\\Users\\jayb\\Documents\\MusicClips\\violin.wav";
printf("Path: %s\n", path);
/* Open soundfile for reading */
soundfileInfo.format = 0; /* Must be set to zero before opening */
sndfPtr = sf_open(path, SFM_READ, &soundfileInfo);
if(sndfPtr == NULL)
{
fprintf(stderr, "Error: %s\n", sf_strerror(NULL));
return -1;
}
/* Close soundfile and check for error */
if(sf_close(sndfPtr))
{
fprintf(stderr, "There was an error closing the soundfile\n");
return -1;
}
return 0;
}
しかし、私は、コンパイル/リンクしようとすると、Libsndfileが関数に未定義の参照のエラーを取得し、プラス悪いRELOCアドレスエラー保つ:
C:\Users\jbiernat\AppData\Local\Temp\ccSmO0dw.o:sndfile_test.c:(.text+0xbb): undefined reference to `sf_open'
C:\Users\jbiernat\AppData\Local\Temp\ccSmO0dw.o:sndfile_test.c:(.text+0xd8): undefined reference to `sf_strerror'
C:\Users\jbiernat\AppData\Local\Temp\ccSmO0dw.o:sndfile_test.c:(.text+0x10a): undefined reference to `sf_close'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: C:\Users\jbiernat\AppData\Local\Temp\ccSmO0dw.o: bad reloc address 0x20 in section `.eh_frame'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
私は、このコマンドでコンパイルしています:
をgcc -Wall -o sndfile_test.exe sndfile_test.c -llibsndfile-1
Libsndfileがのインストールには、ヘッダファイルsndfile.h
とsndfile.hh
、との.lib、.defファイル、および.dllファイルが付属しています:libsndfile-1.lib libsndfile-1.def libsndfile-1.dll
ヘッダーとライブラリのディレクトリはコンパイラの検索パスに含まれていますが、ライブラリを見つけるのに問題はありません。私はまた、コピーした.a拡張子を持つの.libファイルを名前を変更し、(これは同様の問題を持つ他の誰かのために働いていた)-lsndfile-1
とリンクしようとしたinstructions on the minGW wiki
あたりとして-llibsndfile-1
との.libファイルをリンクしますが、私よ私がそうするとき、まったく同じエラーを得る。
助けていただけたら幸いです!私がlibsndfileにうまくリンクできない場合は、オーディオファイルからの読み込みに使用できる他の単純なライブラリがありますか?
編集:私は解決策を見つけようと2日間を過ごすもちろん、最終的にはStackOverflowのために掲示した後、2時間後に問題を解決します。質問に対する答えとして私の解決策を掲載します。
:あなたはそれの両方があるで、ラインであることを確認してくださいあなたのMinGWのインストールとライブラリのビット幅です32ビットまたは64ビット? – alk
このコマンドで試してみてください: 'gcc -Wall -o sndfile_test.exe sndfile_test.c -lsndfile' – user3078414
@alk - My MinGWのインストールは間違いなく64bitで、ダウンロードした64bitインストーラーを使ってライブラリをインストールしました。それによって構築されたライブラリも64ビットです... @ user3078414 - -lsndfileでリンクすると 'can not find -lsndfile'というエラーが返されますが、提案していただきありがとうございます –