2011-12-03 63 views
7

Tôi đang cố gắng biên dịch OpenCV phiên bản 2.3.1 trên Ubuntu 11.10 theo hướng dẫn được mô tả here. Tôi nhận được lỗi sau. Không thể hiểu những gì đang xảy ra ... /usr/local/lib/libavcodec.a tồn tại nhưng mối liên kết không thể liên kết với nó, hoặc cái gì khác?Lỗi trình liên kết lạ khi biên dịch OpenCV2.3.1 trên Ubuntu 11.10

lỗi:

[ 20%] Built target pch_Generate_opencv_highgui 
Linking CXX shared library ../../lib/libopencv_highgui.so 
/usr/bin/ld: /usr/local/lib/libavcodec.a(avpacket.o): relocation R_X86_64_32S against `av_destruct_packet' 
can not be used when making a shared object; recompile with -fPIC 
/usr/local/lib/libavcodec.a: could not read symbols: Bad value 
collect2: ld returned 1 exit status 
+0

bạn đã cố gắng biên soạn với -fPIC như lỗi gợi ý? – RCE

+0

Biên dịch cái gì? OpenCV chính nó? –

+0

@RCE Làm cách nào để thêm cờ -fPIC vào trình biên dịch/trình liên kết? Tôi có nên chỉnh sửa MakeFile không? –

Trả lời

6

Vấn đề là bạn đang cố gắng để liên kết libopencv_highgui.so với libavcodec.a. Cái sau được xây dựng từ mã được biên dịch mà không có -fPIC (điều này khá bình thường) và mã đó không thể được liên kết trong các thư viện được chia sẻ trên x86_64.

sự lựa chọn của bạn là:

  • Lấy libavcodec.so và sắp xếp để liên kết chống lại nó, hoặc
  • Di libavcodec hoặc -lavcodec từ dòng liên kết hoàn toàn.

Đầu tiên, bạn rất có thể chỉ cần cài đặt gói libavcodec-dev.

Nếu bạn làm việc thứ hai, bạn sẽ vẫn phải sắp xếp các ký hiệu mà libopencv_highgui.so cần từ libavcodec để có sẵn khi chạy. Bạn có thể đạt được điều đó bằng cách liên kết tệp thực thi chính với libavcodec (một trong hai lưu trữ hoặc biến thể được chia sẻ).

+0

Tôi thêm tùy chọn --enable-pic cho cả x264 và ffmpeg. Có lỗi tương tự. Sau đó gỡ bỏ libhighgui và libcv (cài đặt từ kho ubuntu) và cũng cài đặt libavc-1394-22-dev. Biên soạn OpenCV một lần nữa và nó hoạt động tốt! Cảm ơn –

+0

Bạn đã xóa libhighgui và libcv bằng cách nào? Bạn cũng có thể gửi liên kết tới libavc-1394-22-dev không – oneiros

4

mất của tôi sẽ được rằng, chạy sudo đầu tiên apt-get remove libavcodec, sau đó cài đặt lại với sudo apt-get install libopencv-dev

Tôi đã từng có vấn đề tương tự, và ở trên giải quyết nó

2

Chạy một phiên bản 64-bit của Ubuntu, bạn phải cấu hình và xây dựng ffmpeg với ./configure --enable-shared --enable-pic như được mô tả trong bước 7b và 8b

Các vấn đề liên quan