4

アプリケーションでlibjpegを使用しようとしています。プロジェクトを作成すると、.libs フォルダーに libjpeg.a が生成されます。私がやりたいことは、このファイルをリンク段階で使用することです。私は次のことを試しました: C コードが存在するフォルダーに libjpeg.a をコピーしました。とリンクしようとしている

gcc libjpeg.a mycode.c -o executable_name

失敗します。gcc -ljpeg mycode.c を実行すると、ヘッダーを「libjpeg.h」ではなく指すように変更すると、コンパイルは成功しますが、これは明らかにシステム全体の動的バージョンのライブラリにリンクします。

相対パスまたは絶対パスでリンクしようとしても失敗します。

gcc ./libjpeg.a mycode.c -o executable_name

静的オプションも試しました:

gcc -static libjpeg.a mycode.c -o executable_name

リンカー エラーは次のとおりです。

Linking...
gcc -std=c99 -Wall -Wextra -g -pedantic ./libjpeg.a ./libjpeg.a -lm obj/read_jpeg.o obj/utils.o -o test_jpeg
obj/read_jpeg.o: In function `read_JPEG_file':
/home/ustun/Downloads/jpeg_test/read_jpeg.c:37: undefined reference to `jpeg_std_error'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:45: undefined reference to `jpeg_CreateDecompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:46: undefined reference to `jpeg_stdio_src'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:47: undefined reference to `jpeg_read_header'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:48: undefined reference to `jpeg_start_decompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:62: undefined reference to `jpeg_read_scanlines'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:74: undefined reference to `jpeg_finish_decompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:75: undefined reference to `jpeg_destroy_decompress'
obj/read_jpeg.o: In function `read_JPEG_file_props':
/home/ustun/Downloads/jpeg_test/read_jpeg.c:93: undefined reference to `jpeg_std_error'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:100: undefined reference to `jpeg_CreateDecompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:101: undefined reference to `jpeg_stdio_src'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:102: undefined reference to `jpeg_read_header'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:103: undefined reference to `jpeg_start_decompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:113: undefined reference to `jpeg_read_scanlines'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:116: undefined reference to `jpeg_finish_decompress'
/home/ustun/Downloads/jpeg_test/read_jpeg.c:117: undefined reference to `jpeg_destroy_decompress'
collect2: ld returned 1 exit status
make: *** [test_jpeg] Error 1

Makefile を含む簡単なプロジェクトをここからダウンロードできます。

4

3 に答える 3

5

libjpeg.aコンパイルした場所に相対的な .libs フォルダーに libjpeg.a がある場合は、へのフル パスを指定する必要があります。

gcc  mycode.c -o executable_name .libs/libjpeg.a

特別な libjpeg.a が別の場所にある場合は、それへのフル パスを指定します。

これが失敗した場合は、どうなるかをお知らせください。(詳細は重要なので、正確なエラーと実行された正確なコマンド ラインをコピーして貼り付けてください)。

于 2011-09-22T09:40:35.913 に答える
1

-static を使用する必要があります。

gcc -static -o exec_name mycode.c -ljpeg

アーカイブ (.a) をコピーする必要はありません。man ld を読めばわかるはずです。

于 2011-09-22T09:40:11.123 に答える
0

あなたが私と同じ問題を抱えている場合、これはあなたを助けるかもしれません。私のシステムでは、

libjpeg.so.62 -> libjpeg.so.62.0.0 libjpeg.so.62.0.0

シンボリックリンクを追加した後:

sudo ln -s libjpeg.so.62 libjpeg.so

私の問題は解決しました。

于 2016-08-12T22:23:05.177 に答える