ฉันจะเพิ่มไลบรารีภายนอกลงในโปรเจ็กต์ที่สร้างโดย Qt Creator RC1 (เวอร์ชัน 0.9.2) ได้อย่างไร ตัวอย่างเช่นEnumProcesses()
ต้องPsapi.lib
เพิ่มฟังก์ชัน win32 ในโปรเจ็กต์เพื่อสร้าง
ฉันจะเพิ่มไลบรารีภายนอกลงในโปรเจ็กต์ที่สร้างโดย Qt Creator RC1 (เวอร์ชัน 0.9.2) ได้อย่างไร ตัวอย่างเช่นEnumProcesses()
ต้องPsapi.lib
เพิ่มฟังก์ชัน win32 ในโปรเจ็กต์เพื่อสร้าง
คำตอบ:
วิธีที่เหมาะสมในการทำเช่นนี้:
LIBS += -L/path/to -lpsapi
วิธีนี้จะใช้ได้กับทุกแพลตฟอร์มที่รองรับโดย Qt แนวคิดคือคุณต้องแยกไดเร็กทอรีออกจากชื่อไลบรารี (โดยไม่มีนามสกุลและไม่มีคำนำหน้า "lib") แน่นอนหากคุณรวม lib เฉพาะของ Windows สิ่งนี้ไม่สำคัญ
ในกรณีที่คุณต้องการจัดเก็บไฟล์ lib ของคุณในไดเร็กทอรีโปรเจ็กต์คุณสามารถอ้างอิงด้วย$$_PRO_FILE_PWD_
ตัวแปรเช่น:
LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi
qmake -tp vc
ฉันไม่พบชื่อ libs ในAdditional Dependencies
โครงการ แต่ vs project ทำงานได้ดี หมายความว่ามีวิธีอื่นในการบวกAdditional Dependencies
vs หรือไม่?
LIBS += -lGdi32
นี้:
LIBS + = C: \ Program Files \ OpenCV \ lib
จะไม่ทำงานเนื่องจากคุณกำลังใช้ช่องว่างใน Program Files ในกรณีนี้คุณต้องเพิ่มคำพูดดังนั้นผลที่ได้จะมีลักษณะเช่นนี้LIBS + = "C: \ Program Files \ OpenCV \ lib" ฉันขอแนะนำให้วางห้องสมุดในสถานที่ที่ไม่ใช่พื้นที่สีขาว ;-)
WINDIR = $$DIR
,WINDIR ~=s,/,\\,g
ข้อผิดพลาดที่คุณหมายถึงเกิดจากไม่มีเส้นทางการรวมเพิ่มเติม ลองเพิ่มด้วย: INCLUDEPATH + = C: \ path \ to \ include \ files \ หวังว่าจะใช้งานได้ ความนับถือ.
และหากต้องการเพิ่มไฟล์ไลบรารีหลายไฟล์คุณสามารถเขียนได้ดังนี้:
INCLUDEPATH * = E: / DebugLibrary / VTK E: / DebugLibrary / VTK / Common E: / DebugLibrary / VTK / Filtering E: / DebugLibrary / VTK / GenericFiltering E: / DebugLibrary / VTK / Graphics E: / DebugLibrary / VTK / GUISupport / 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 * = เลอ: / DebugLibrary / VTKBin / bin / ปล่อย -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtk ไฮบริด -lvtk ระดับเสียงเรนเดอร์ -lQVTKWidgetPlugin -lvtkGenericFiltering
หากคุณต้องการปรับใช้แอปพลิเคชันของคุณบนเครื่องของลูกค้าแทนที่จะใช้แอปพลิเคชันของคุณเพียงอย่างเดียวเราพบว่า LIBS+= -Lxxx -lyyy
วิธีนี้อาจทำให้เกิดความสับสนได้หากไม่ใช่ปัญหา
เราพัฒนาแอปพลิเคชันสำหรับ Linux, Mac และ Windows โดยใช้ Qt เราจัดส่งแอปพลิเคชันแบบสแตนด์อโลนที่สมบูรณ์ ดังนั้นไลบรารีที่ไม่ใช่ระบบทั้งหมดควรรวมอยู่ในแพ็คเกจการปรับใช้ เราต้องการให้ลูกค้าของเราสามารถเรียกใช้แอปพลิเคชันจากแท่ง USB เดียวกันสำหรับทุกระบบปฏิบัติการ ด้วยเหตุผลด้านความเข้ากันได้ของแพลตฟอร์มจึงต้องฟอร์แมตแท่ง USB เป็น FAT32 ซึ่งไม่รองรับ symlinks (Linux)
เราพบLIBS+= -Lxxx -lyyy
สำนวนของกล่องดำมากเกินไป:
เราไม่ทราบแน่ชัดว่า filepath คืออะไรของไลบรารี (แบบคงที่หรือไดนามิก) ที่ผู้เชื่อมโยงพบ สิ่งนี้ไม่สะดวก ตัวเชื่อมต่อ Mac ของเราพบว่า libs แตกต่างจากที่เราคิดว่าควรใช้เป็นประจำ สิ่งนี้เกิดขึ้นหลายครั้งกับไลบรารี OpenSSL ที่ Mac linker พบและใช้เวอร์ชัน OpenSSL ที่เก่ากว่าและเข้ากันไม่ได้แทนที่จะเป็นเวอร์ชันที่เราร้องขอ
เราไม่สามารถจ่ายได้ที่ตัวเชื่อมโยงใช้ symlinks กับไลบรารีเนื่องจากจะทำให้แพ็คเกจการปรับใช้งานเสียหาย
เราต้องการดูจากชื่อของไลบรารีว่าเราเชื่อมโยงไลบรารีแบบคงที่หรือไดนามิก
ดังนั้นสำหรับกรณีเฉพาะของเราเราใช้เฉพาะ filepaths สัมบูรณ์และตรวจสอบว่ามีอยู่หรือไม่ เราลบ symlink ทั้งหมด
อันดับแรกเราจะหาระบบปฏิบัติการที่เราใช้และใส่ไว้ในตัวแปร CONFIG และตัวอย่างเช่นสำหรับ Linux 64 บิตจากนั้น:
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
}
การอ้างอิงทั้งหมดสามารถคัดลอกลงในแพ็คเกจการปรับใช้ตามที่เราทราบเส้นทางของไฟล์
ฉันต้องการเพิ่มเพื่อความสมบูรณ์ที่คุณสามารถเพิ่มเฉพาะ LIBRARY PATH ซึ่งจะมองหาไลบรารีที่ขึ้นต่อกัน (ซึ่งอาจไม่ได้อ้างอิงโดยตรงในโค้ดของคุณ แต่อาจต้องใช้ไลบรารีที่คุณใช้)
สำหรับการเปรียบเทียบสิ่งนี้จะสอดคล้องกับสิ่งที่สภาพแวดล้อมของ LIBPATH ทำ แต่มันคลุมเครือใน Qt Creator และไม่ได้รับการบันทึกไว้อย่างดี
วิธีที่ฉันมารอบนี้มีดังต่อไปนี้:
LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"
โดยพื้นฐานแล้วถ้าคุณไม่ได้ระบุชื่อไลบรารีจริงมันจะเพิ่มพา ธ ไปยังตำแหน่งที่จะค้นหาไลบรารีที่อ้างอิง ความแตกต่างของไวยากรณ์มีเพียงเล็กน้อย แต่มีประโยชน์มากในการจัดหา PATH เพื่อค้นหาไลบรารีที่อ้างอิง บางครั้งก็เป็นเพียงความเจ็บปวดในการจัดหาไลบรารีแต่ละเส้นทางที่คุณรู้ว่าทั้งหมดอยู่ในโฟลเดอร์ใดโฟลเดอร์หนึ่งและผู้สร้าง Qt จะหยิบมันขึ้นมา
ใน. pro: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib
ใน. h / .cpp: #pragma comment(lib,"user32.lib")
#pragma comment(lib,"psapi.lib")