Câu trả lời:
Cách thích hợp để làm điều này là như sau:
LIBS += -L/path/to -lpsapi
Bằng cách này, nó sẽ hoạt động trên tất cả các nền tảng được Qt hỗ trợ. Ý tưởng là bạn phải tách thư mục khỏi tên thư viện (không có phần mở rộng và không có bất kỳ tiền tố 'lib' nào). Tất nhiên, nếu bạn đang bao gồm một lib cụ thể của Windows, điều này thực sự không quan trọng.
Trong trường hợp bạn muốn lưu trữ các tệp lib của mình trong thư mục dự án, bạn có thể tham chiếu chúng bằng $$_PRO_FILE_PWD_
biến, ví dụ:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
qmake -tp vc
, tôi không tìm thấy tên libs nào trong Additional Dependencies
dự án, nhưng dự án vs vẫn chạy tốt. Có nghĩa là có một số phương pháp khác để thêm Additional Dependencies
vào vs?
LIBS += -lGdi32
.
LIBS + = C: \ Program Files \ OpenCV \ lib
sẽ không hoạt động vì bạn đang sử dụng khoảng trắng trong Tệp chương trình. Trong trường hợp này, bạn phải thêm dấu ngoặc kép, vì vậy kết quả sẽ như sau: LIBS + = "C: \ Program Files \ OpenCV \ lib" . Tôi khuyên bạn nên đặt thư viện ở các vị trí không có khoảng trắng ;-)
WINDIR = $$DIR
,WINDIR ~=s,/,\\,g
Lỗi ý bạn là do thiếu đường dẫn bao gồm bổ sung. Hãy thử thêm nó bằng: INCLUDEPATH + = C: \ path \ to \ include \ files \ Hy vọng nó hoạt động. Trân trọng.
Và để thêm nhiều tệp thư viện, bạn có thể viết như sau:
INCLUDEPATH * = E: / DebugLibrary / VTK E: / DebugLibrary / VTK / Common E: / DebugLibrary / VTK / Filtering E: / DebugLibrary / VTK / GenericFiltering E: / DebugLibrary / VTK / Graphics E: / DebugLibrary / VTK / GUISu Qt E: / DebugLibrary / VTK / Hybrid E: / DebugLibrary / VTK / Imaging E: / DebugLibrary / VTK / IO E: / DebugLibrary / VTK / Parallel E: / DebugLibrary / VTK / Rendering E: / DebugLibrary / VTK / Utilities E : / DebugLibrary / VTK / VolumeRendering E: / DebugLibrary / VTK / Widgets E: / DebugLibrary / VTK / Wrapping
Libs * = -le: / DebugLibrary / VTKBin / bin / phát hành -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGenericFiltering
Nếu bạn muốn triển khai ứng dụng của mình trên máy của khách hàng, thay vì chỉ sử dụng ứng dụng của bạn, chúng tôi thấy rằng LIBS+= -Lxxx -lyyy
phương pháp này có thể dẫn đến nhầm lẫn nếu không muốn nói là các vấn đề.
Chúng tôi phát triển các ứng dụng cho Linux, Mac và Windows bằng Qt. Chúng tôi gửi các ứng dụng hoàn chỉnh, độc lập. Vì vậy, tất cả các thư viện không thuộc hệ thống nên được bao gồm trong gói triển khai. Chúng tôi muốn khách hàng của mình có thể chạy ứng dụng từ cùng một thẻ USB cho tất cả các hệ điều hành. Vì lý do tương thích với nền tảng, thanh USB sau đó phải được định dạng là FAT32, không hỗ trợ các liên kết tượng trưng (Linux).
Chúng tôi tìm thấy LIBS+= -Lxxx -lyyy
thành ngữ quá nhiều về hộp đen:
Chúng tôi không biết chính xác đường dẫn tệp của thư viện (tĩnh hoặc động) đã được trình liên kết tìm thấy. Điều này thật bất tiện. Trình liên kết Mac của chúng tôi thường xuyên tìm thấy các lib khác với những libs mà chúng tôi nghĩ rằng nên được sử dụng. Điều này đã xảy ra vài lần với các thư viện OpenSSL nơi trình liên kết Mac đã tìm thấy và sử dụng phiên bản OpenSSL của chính nó - cũ hơn, không tương thích - hơn là phiên bản chúng tôi yêu cầu.
Chúng tôi không thể để trình liên kết sử dụng liên kết tượng trưng cho các thư viện vì điều này sẽ phá vỡ gói triển khai.
Chúng tôi muốn xem từ tên của thư viện xem chúng tôi liên kết thư viện tĩnh hay động.
Vì vậy, đối với trường hợp cụ thể của chúng tôi, chúng tôi chỉ sử dụng các đường dẫn tệp tuyệt đối và kiểm tra xem chúng có tồn tại hay không. Chúng tôi xóa tất cả các liên kết tượng trưng.
Đầu tiên, chúng tôi tìm hiểu xem chúng tôi đang sử dụng hệ điều hành nào và đặt nó vào biến CONFIG. Và, ví dụ đối với Linux 64bit, thì:
linux64 {
LIBSSL= $$OPENSSLPATH/linux64/lib/libssl.a
!exists($$LIBSSL): error ("Not existing $$LIBSSL")
LIBS+= $$LIBSSL
LIBCRYPTO= $$OPENSSLPATH/linux64/lib/libcrypto.a
!exists($$LIBCRYPTO): error ("Not existing $$LIBCRYPTO")
LIBS+= $$LIBCRYPTO
}
Tất cả các phần phụ thuộc có thể được sao chép vào gói triển khai như chúng ta biết đường dẫn tệp của chúng.
Tôi muốn thêm vào vì lợi ích của sự hoàn chỉnh rằng bạn cũng có thể chỉ thêm LIBRARY PATH nơi nó sẽ tìm kiếm một thư viện phụ thuộc (có thể không được tham chiếu trực tiếp trong mã của bạn nhưng một thư viện bạn sử dụng có thể cần nó).
Để so sánh, điều này sẽ tương ứng với những gì môi trường LIBPATH thực hiện nhưng loại nó bị che khuất trong Qt Creator và không được ghi chép đầy đủ.
Cách tôi đến đây là sau:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
Về cơ bản, nếu bạn không cung cấp tên thư viện thực, nó sẽ thêm đường dẫn đến nơi nó sẽ tìm kiếm các thư viện phụ thuộc. Sự khác biệt về cú pháp là nhỏ nhưng điều này rất hữu ích để chỉ cung cấp PATH nơi tìm kiếm các thư viện phụ thuộc. Đôi khi thật khó khăn khi cung cấp từng thư viện riêng lẻ cho từng đường dẫn nơi bạn biết tất cả chúng đều nằm trong một thư mục nhất định và Qt Creator sẽ chọn chúng.
trong .pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
trong .h / .cpp: #pragma comment(lib,"user32.lib")
#pragma comment(lib,"psapi.lib")