Tôi đã cài đặt Ubuntu vài ngày trước và sử dụng apt-get để cài đặt build_essentials, opencv, highgui, v.v. g ++ là 4.6.1, opencv có vẻ là 2.1.0 .. Tôi đã làm t xây dựng opencv từ nguồn ..Ububtu, opencv, và liên kết
Chúng tôi có một số phần mềm sử dụng chức năng opencv. Hãy giả vờ các tệp nguồn được đặt tên là a.cpp và b.cpp. Tôi biên dịch sang a.o và b.o và sau đó đặt chúng vào thư viện .so (gọi nó là libab.so).
Cuối cùng, có một tệp có tên chính trong đó (gọi là z.cpp). Tôi cố gắng để xây dựng một thực thi từ nó, nhưng tôi nhận được một tấn "không xác định tham chiếu" lỗi để cv :: công cụ. Dòng liên kết của tôi trông giống như sau:
g++ -fPIC -g z.cpp -L../lib -lab -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
sau đó tôi nhận được lỗi tham chiếu không xác định (tất cả đều là cv :: stuff).
Phần thú vị là nếu tôi liên kết trực tiếp với các tệp .o của tôi, nó sẽ xây dựng tốt. Vì vậy, điều này:
g++ -fPIC -g z.cpp a.o b.o -lml -lcvaux -lhighgui -lcv -lcxcore -o z.out
hoạt động.
Mọi thứ tôi đã đọc có vẻ hàm ý đây là vấn đề đặt hàng liên kết, nhưng tôi đã thử tất cả các hoán vị đặt hàng và gặp vấn đề tương tự, vì vậy tôi thực sự không nghĩ vấn đề của mình, nhưng tôi có thể vẫn sai. Bất cứ ai cũng có bất kỳ ý tưởng nào về cách tôi có thể xây dựng thư viện của mình và tại sao nó sẽ hoạt động khác nếu tôi xây dựng bộ hoàn chỉnh các tệp .o nằm trong thư viện thành công, nhưng không thể xây dựng với chính thư viện?
Ok, vậy isn này 't thực sự là một "giải pháp", nhưng tôi đã kết thúc cài đặt opencv 2.3.1 từ nguồn - cũng đã phải cài đặt ffmpeg (v0.8 đặc biệt!) và bây giờ tất cả mọi thứ hoạt động. Vì vậy, nó rõ ràng đã có một cái gì đó để làm với các opencv xây dựng mà tôi đã nhận với apt-get. Tôi đã không thử điều này, nhưng tôi đoán tôi có thể đã cài đặt 2,1 từ nguồn và nó đã có thể làm việc quá. Vẫn không chắc chắn tại sao biên dịch với thư viện so với.o của sẽ là một vấn đề, nhưng mọi thứ đang làm việc bây giờ, vì vậy .... – daroo