我試圖在我的應用程序中使用libjpeg。使項目在.libs文件夾中生成libjpeg.a。我想要做的是在聯動階段使用這個文件。我已經嘗試了以下內容:我將libjpeg.a複製到我的C代碼所在的文件夾中。嘗試鏈接鏈接庫的靜態版本而不是動態版本
gcc libjpeg.a mycode.c -o executable_name
失敗。如果我使用gcc -ljpeg mycode.c,那麼當我將標題更改爲指向「libjpeg.h」而不是「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下載一個簡單的項目here。
謝謝。這似乎是正確的軌道,但我仍然有聯繫錯誤。 Libjpeg還創建了一個.la文件,也許我需要鏈接它。 – ustun
我認爲這實際上做到了!圖書館需要結束。我會再看一看,很可能接受這個。 – ustun
我同意沒有答案。請記住,未來鏈接器參數對它們的調用順序非常敏感(通常:對象只能找到它們鏈接到鏈接器線右側的函數,而不是左側)。當.la對象在遊戲中時,它們是libtool對象,您可以使用libtool鏈接到它們,也可以在.libs中找到真實的對象。 – thiton