কিউটি ক্রিয়েটর প্রজেক্টে বাহ্যিক লাইব্রেরি যুক্ত করা হচ্ছে


112

কিউটি ক্রিয়েটার আরসি 1 (সংস্করণ 0.9.2) দ্বারা নির্মিত একটি প্রকল্পে আমি কীভাবে বাহ্যিক লাইব্রেরি যুক্ত করতে পারি? উদাহরণস্বরূপ, উইন 32 ফাংশনটি নির্মাণের জন্য প্রকল্পে যুক্ত করা EnumProcesses()প্রয়োজন Psapi.lib

উত্তর:


216

এটি করার সঠিক উপায়টি হ'ল:

LIBS += -L/path/to -lpsapi

এইভাবে এটি Qt দ্বারা সমর্থিত সমস্ত প্ল্যাটফর্মগুলিতে কাজ করবে। ধারণাটি হ'ল আপনাকে ডিরেক্টরিটি লাইব্রেরির নাম থেকে আলাদা করতে হবে (এক্সটেনশন ছাড়াই এবং কোনও 'lib' উপসর্গ ছাড়াই)। অবশ্যই, আপনি যদি একটি উইন্ডোজ নির্দিষ্ট lib অন্তর্ভুক্ত করা হয়, এটি সত্যিই কোন ব্যাপার না।

আপনি যদি প্রজেক্ট ডিরেক্টরিতে আপনার lib ফাইলগুলি সংরক্ষণ করতে চান তবে আপনি সেগুলি $$_PRO_FILE_PWD_ভেরিয়েবলের সাথে উল্লেখ করতে পারেন , উদাহরণস্বরূপ:

LIBS += -L"$$_PRO_FILE_PWD_/3rdparty/libs/" -lpsapi

2
লাইব্রেরির পথ হিসাবে কোনও পরিবেশের পরিবর্তনশীল নির্দিষ্ট করা সম্ভব? আমি জিজ্ঞাসা করছি কারণ .pro ফাইলটিতে হার্ডকোডযুক্ত পাথের নামগুলি লিখলে জিনিসগুলি ভেঙে যায় যদি কোনও প্রকল্প একাধিক লোকের দ্বারা বিকাশিত হয় যার কাছে একই জায়গাগুলিতে সমস্ত লাইব্রেরি ইনস্টল না থাকে।
এন্টারড হয়েছে

এটি আমার পক্ষে কাজ করেছিল, তবে যখন আমি কোনও বনাম প্রকল্প তৈরি করি তখন আমি প্রকল্পের qmake -tp vcকোনও লিবসের নাম পাই না Additional Dependencies, তবে বনাম প্রকল্পটি ভালভাবে চালায়। Additional Dependenciesবনাম যুক্ত করার জন্য আরও কিছু পদ্ধতি রয়েছে তার মানে কি ?
গ্রীষ্মে

1
আমি মনে করি না আপনি একটি বিল্ট-ইন উইন্ডোজ লাইব্রেরির জন্য কোনও পথ নির্দিষ্ট করতে হবে। আমাদের .pro ফাইল Win32 বিভাগে ভালো লাইন আছে: LIBS += -lGdi32
ড্যান কর্ন

1
@ ড্যানকর্ন যেমন উল্লেখ করেছেন, অন্তর্নির্মিত উইন্ডোজ লাইব্রেরির জন্য আপনাকে কোনও পথ নির্দিষ্ট করার দরকার নেই (এবং হওয়া উচিত নয়)।
বুড়

কেন তারা কেবল একটি লাইব্রেরি এসএমএইচ যোগ করার জন্য একটি জিইউআই করতে পারে না।
জেনকোড

24

আপনি কি qmakeপ্রকল্পগুলি ব্যবহার করছেন ? যদি তা হয় তবে আপনি LIBSভেরিয়েবলটি ব্যবহার করে একটি বাহ্যিক লাইব্রেরি যুক্ত করতে পারেন । উদাহরণ:

win32:LIBS += path/to/Psapi.lib

1
খোঁড়া প্রশ্নের জন্য দুঃখিত, তবে কী psapi গ্রন্থাগারটি ইতিমধ্যে প্রাক-বিল্ট করা উচিত বা QtCreator এটি নির্মাণের যত্ন নেবে?
Dfr

11

LIBS + = সি: \ প্রোগ্রাম ফাইল \ ওপেনসিভি \ lib

আপনি প্রোগ্রাম ফাইলগুলিতে সাদা স্পেস ব্যবহার করছেন বলে কাজ করবে না। এই ক্ষেত্রে আপনাকে উদ্ধৃতি যুক্ত করতে হবে, সুতরাং ফলাফলটি এর মতো দেখাবে: LIBS + = "সি: \ প্রোগ্রাম ফাইলগুলি \ ওপেনসিভি \ lib" । আমি সাদা-স্থানের স্থানে লাইব্রেরি রাখার প্রস্তাব দিই ;-)


কিউটি (স্রষ্টা) এর সর্বশেষতম সংস্করণগুলি সর্বদা (একক) ফরোয়ার্ড স্ল্যাশ ডিরেক্টরি বিভাজক হিসাবে চায়। ব্যতিক্রম কেবলমাত্র যখন আপনি উইন্ডোজ এর অধীনে "সিস্টেম" কমান্ড ব্যবহার করেন use তারপরে আপনাকে সিস্টেমে একটি পালিয়ে যাওয়া পশ্চাদপদ স্ল্যাশ খাওয়ানো দরকার, এটি দুটি ব্যাকওয়ার্ড স্ল্যাশ বলতে হবে। : নিম্নরূপ দুই অনগ্রসর স্ল্যাশ সঙ্গে সব ফরওয়ার্ড স্ল্যাশ প্রতিস্থাপন করতে কাজ করা যেতে পারে WINDIR = $$DIR,WINDIR ~=s,/,\\,g
adlag

6

অতিরিক্ত ত্রুটিযুক্ত পথটি হারিয়ে যাওয়ার কারণে আপনি যে ত্রুটিটি বোঝাতে চাইছেন। এটি যুক্ত করার চেষ্টা করুন: INCLUDEPATH + = সি: \ পথ \ থেকে \ ফাইলগুলি অন্তর্ভুক্ত করুন \ আশা করি এটি কাজ করে। শুভেচ্ছা।


4

এবং একাধিক গ্রন্থাগার ফাইল যুক্ত করতে আপনি নীচের মত লিখতে পারেন:

ইনক্লুডিপথ * = ই: / ডিবাগলাইবারি / ভিটিকে ই: / ডিবাগলাইবারি / ভিটিকে / সাধারণ ই: / ডিবাগলাইবারি / ভিটিকে / জেনেরিক ফিল্টারিং ই: / ডিবাগলাইবারি / ভিটিকে / গ্রাফিক্স ই: / ডিবাগলিবারি / ভিটিকিউরিগিউরিউ কিউটি ই: / ডিবাগলিবারি / ভিটিকে / হাইব্রিড ই: / ডিবাগলাইবারি / ভিটিকে / ইমেজিং ই: / ডিবাগলাইবারি / ভিটিকে / আইও ই: / ডিবাগলাইবারি / ভিটিকে / সমান্তরাল ই: / ডিবাগলাইবারি / ভিটিকে / রেন্ডারিং ই: / ডিবাগলিবারি / ভিটিকে / ইউটিলিটিস : / ডিবাগলিবারি / ভিটিকে / ভলিউম রেন্ডারিং ই: / ডিবাগলিবারি / ভিটিকে / উইজেটস ই: / ডিবাগলাইবারি / ভিটিকে / মোড়ানো

Libs * = -LE: / DebugLibrary / VTKBin / বিন / মুক্তি -lvtkCommon -lvtksys -lQVTK -lvtkWidgets -lvtkRendering -lvtkGraphics -lvtkImaging -lvtkIO -lvtkFiltering -lvtkDICOMParser -lvtkpng -lvtktiff -lvtkzlib -lvtkjpeg -lvtkexpat -lvtkNetCDF -lvtkexoIIc -lvtkftgl -lvtkfreetype -lvtkHybrid -lvtkVolumeRendering -lQVTKWidgetPlugin -lvtkGeneric ফিল্টারিং


3

আপনি যদি কেবল নিজের অ্যাপ্লিকেশনটি নিজে ব্যবহার না করে গ্রাহকদের মেশিনে আপনার অ্যাপ্লিকেশন স্থাপন করতে চান তবে আমরা দেখতে পেলাম যে LIBS+= -Lxxx -lyyyসমস্যাটি না হলে এই পদ্ধতিটি বিভ্রান্তির কারণ হতে পারে।

আমরা Qt ব্যবহার করে লিনাক্স, ম্যাক এবং উইন্ডোজের জন্য অ্যাপ্লিকেশনগুলি বিকাশ করি। আমরা সম্পূর্ণ, একা একা অ্যাপ্লিকেশন শিপ। সুতরাং সমস্ত নন-সিস্টেম লাইব্রেরিগুলি মোতায়েন প্যাকেজে অন্তর্ভুক্ত করা উচিত। আমরা চাই আমাদের গ্রাহকরা সমস্ত ওএসের জন্য একই ইউএসবি স্টিক থেকে অ্যাপ্লিকেশনটি চালাতে সক্ষম হন। প্ল্যাটফর্মের সামঞ্জস্যের কারণে ইউএসবি স্টিকটি অবশ্যই FAT32 হিসাবে ফর্ম্যাট করা উচিত, যা (লিনাক্স) সিমলিংকগুলি সমর্থন করে না।

আমরা LIBS+= -Lxxx -lyyyএকটি ব্ল্যাক বাক্সের চেয়ে অনেক বেশি প্রতিমাটি পেয়েছি :

  1. লিঙ্কারের সাহায্যে পাওয়া (স্ট্যাটিক বা ডায়নামিক) লাইব্রেরির ফাইলপথটি কী তা আমরা ঠিক জানি না। এটি অসুবিধাজনক। আমাদের ম্যাক লিঙ্কারটি নিয়মিতভাবে লাইবগুলি ব্যবহার করা উচিত বলে ভেবেছিল তার থেকে আলাদা found এটি ওপেনএসএসএল লাইব্রেরিগুলির সাথে বেশ কয়েকবার ঘটেছিল যেখানে ম্যাক লিঙ্কারটি আমাদের অনুরোধিত সংস্করণটির চেয়ে তার নিজস্ব - পুরানো, বেমানান - ওপেনএসএসএল সংস্করণ খুঁজে পেয়েছিল এবং ব্যবহার করেছে।

  2. লিঙ্কার লাইব্রেরিতে সিমলিংক ব্যবহার করে থাকে তা আমরা বহন করতে পারি না কারণ এটি স্থাপনার প্যাকেজটি ভেঙে দেয়।

  3. আমরা লাইব্রেরির নাম থেকে দেখতে চাই যে আমরা একটি স্ট্যাটিক বা ডায়নামিক লাইব্রেরি যুক্ত করি।

সুতরাং আমাদের বিশেষ ক্ষেত্রে আমরা কেবল পরম ফাইলপথ ব্যবহার করি এবং সেগুলি বিদ্যমান কিনা তা পরীক্ষা করে দেখি। আমরা সমস্ত syllinks অপসারণ।

প্রথমে আমরা কোন অপারেটিং সিস্টেমটি ব্যবহার করছি তা সন্ধান করে এটি কনফিগ ভেরিয়েবলে রেখেছি। এবং, উদাহরণস্বরূপ লিনাক্স bit৪ বিট এর জন্য:

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
}

সমস্ত নির্ভরতাগুলি ডিপোমেন্ট প্যাকেজে অনুলিপি করা যেতে পারে কারণ আমরা তাদের ফাইলপথগুলি জানি।


1

আমি সম্পূর্ণতার জন্য যুক্ত করতে চাই যে আপনি কেবলমাত্র লাইব্রেরি পাঠ যোগ করতে পারেন যেখানে এটি নির্ভরশীল গ্রন্থাগারের সন্ধান করবে (যা আপনার কোডে সরাসরি উল্লেখ করা যেতে পারে না তবে আপনার ব্যবহৃত গ্রন্থাগারের প্রয়োজন হতে পারে)।

তুলনা করার জন্য, এটি LIBPATH পরিবেশ যা কিছু করে তার সাথে মিলে যাবে তবে Qt স্রষ্টার মধ্যে এটির ধরণের অস্পষ্টতা এবং ভালভাবে নথিভুক্ত নয়।

আমি যেভাবে এদিকে এসেছি তা নিম্নলিখিত:

LIBS += -L"$$_PRO_FILE_PWD_/Path_to_Psapi_lib/"

মূলত যদি আপনি প্রকৃত লাইব্রেরির নাম না সরবরাহ করেন তবে এটি নির্ভরশীল লাইব্রেরিগুলিতে অনুসন্ধান করবে সেদিকে পথ যুক্ত করে। সিনট্যাক্সের পার্থক্যটি সামান্য তবে নির্ভরশীল লাইব্রেরিগুলি সন্ধান করার জন্য কেবল PATH সরবরাহ করতে এটি খুব দরকারী। প্রতিটি পাথের পৃথক লাইব্রেরি সরবরাহ করার জন্য এটি কেবল কখনও কখনও ব্যথা হয় যেখানে আপনি জানেন যে তারা সমস্ত নির্দিষ্ট ফোল্ডারে রয়েছে এবং কিউটি ক্রিয়েটর তাদের এনে নেবে।


0

প্রো। ইন: LIBS += Ole32.lib OleAut32.lib Psapi.lib advapi32.lib

ইন। এইচ / .সিপি: #pragma comment(lib,"user32.lib")

#pragma comment(lib,"psapi.lib")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.