স্থানীয় লাইব্রেরি লোড হচ্ছে


14

আমি আরডুইনো / সি বিকাশে নতুন (একটি জাভাস্ক্রিপ্ট / রুবি পরিবেশ থেকে আসছে), তবে আমি ভাবছিলাম যে কোনও স্কেচের মধ্যে কোনও কাস্টম ফোল্ডার থেকে একটি লাইব্রেরি অন্তর্ভুক্ত করা সম্ভব ছিল কিনা?

সুতরাং এটি আমার অবস্থা;

project.ino
libs/
  MyNewLib/
    MyNewLib.h
    MyNewLib.ccp

এখন আমার প্রশ্ন: আমি কীভাবে আমার কাস্টম লাইব্রেরি অন্তর্ভুক্ত করতে পারি? আমি এ সম্পর্কে বিভিন্ন প্রকারের চেষ্টা করেছি;

# project.ino

#include <libs/MyNewLib/MyNewLib.h>
#include "libs/MyNewLib/MyNewLib.h"
#include <./libs/MyNewLib/MyNewLib.h>
#include "./libs/MyNewLib/MyNewLib.h"

তবে তাদের কোনওটিই কাজ করে না। এটা সম্ভব কিনা কেউ আমাকে বলতে পারবেন? আমি এই প্রশ্নটি ওয়েবে ঘুরে দেখেছি, তবে আমি কোনও সন্তোষজনক উত্তর খুঁজে পাচ্ছি না। আশা করি আপনি ছেলেরা সাহায্য করতে পারেন।

চিয়ার্স।

হালনাগাদ

আমি সচেতন আপনি আপনার গ্রন্থাগারগুলি আপনার বিশ্বব্যাপী লাইব্রেরি ফোল্ডারে রাখতে পারেন তবে আমি সেগুলি আমার স্থানীয় প্রকল্প ফোল্ডারে চাই। আমি আমার দলের সাথে গিটের মাধ্যমে সেগুলি ভাগ করতে চাই।


4
দয়া করে আমার প্রশ্নটি আবার @ টাইসন পড়ুন। আমি গ্লোবাল লাইব্রেরি সমাধান সম্পর্কে সচেতন, কিন্তু আমি তাদের আমার প্রকল্পের মধ্যেই চাই।
স্টেফান

আপনাকে প্রথমে আইডিইকে জানাতে হবে লাইব্রেরিটি কোথায় পাবেন (পূর্বের লিঙ্কটি দেখুন) তারপরে আপনার স্কেচের মধ্যে আপনি লাইব্রেরিটি কল করবেন। `# অন্তর্ভুক্ত <লাইব্রেরীনেম.h>` আফাইক আপনি দুজনকে এক include/ এক / পথ / লাইব্রেরি / নির্দিষ্ট পথের সাথে একত্রে সংযুক্ত করতে পারবেন না যা আমি অনুমান করছি যা আপনি জিজ্ঞাসা করছেন।
টাইসন

1
ঠিক আছে, তাই আমি সাবফোল্ডার থেকে ফাইলগুলি অন্তর্ভুক্ত করতে পারছি না .. এটি দুঃখের বিষয় ..
স্টিফান


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

উত্তর:


7

ঠিক আছে, এখানে এটি কীভাবে কাজ করে তা নিশ্চিত করার জন্য আমি এটি পরীক্ষা করেছিলাম।

অবশ্যই আপনি হার্ড পাথ ব্যবহার করতে পারেন তবে প্রতিটি প্রোগ্রামার হার্ড পাথ ব্যবহার করে ঘৃণা করে। এগুলি মোটেই পোর্টেবল নয় এবং তারা আপনার প্রোগ্রামটি স্থানে লক করে দেয়। আপনি প্রকল্পের ফাইলগুলিতে নরম বা শক্ত লিঙ্কগুলি ব্যবহার করেন ("LN" এ ম্যান পেজগুলি সন্ধান করুন)। কিন্তু, ... কুৎসিত সম্পর্কে কথা! সুতরাং প্রশ্নটি কীভাবে এটি "সঠিকভাবে" করবেন? কীটি প্যারামিটার এবং কোন পথে সি / সি ++ সংকলকটি চালায় তা শিখছে।

আপনি দেখতে পাবেন যে উপসংহারটি মোটেই স্বজ্ঞাত নয়। মৃগয়া কাটিং: আপেক্ষিক পাথ না সঠিকভাবে কাজ। এখন, কেন?

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

1.6.13 এর হিসাবে (Teensy এখনো 1.8 সমর্থন করে না। *), আপেক্ষিক থেকে শুরু অন্তর্ভুক্ত গ্রন্থাগার আপনার ডিরেক্টরির না। এটি উপস্থিত হয় যে অ্যানো-টু-সি ফিল্টার (মনে রাখবেন যে আরডুইনো একটি টার্গেটে "রূপান্তর" করে তারপরে সি / সি ++ সংকলককে কল করে) আপনি যেখানে নিজের আরডিনো ট্রি ইনস্টল করেছেন সেখান থেকে শুরু হয়। আমার ক্ষেত্রে, আমি "~ / বিন / আরডুইনো" ইনস্টল করেছি। টেনেসির বাড়ি "./hardware/teensy"। লাইব্রেরিগুলির পুরো হোম পাথটি হ'ল "bin / বিন / আরডুইনো / হার্ডওয়্যার / টেনেসি / এভিআর / লাইব্রেরি" যেখানে আপনি সমস্ত সমর্থন প্রোগ্রামের গাছ পাবেন।

একটি উত্স ফাইলে, "# অন্তর্ভুক্ত" test.hpp "" বিবৃতিটি আপনার বর্তমান ডিরেক্টরি থেকে সঠিকভাবে ফাইলটিকে তুলে ধরে। তবুও, যদি আপনি '# অন্তর্ভুক্ত "../test.hpp" ব্যবহার করেন,' অন্তর্ভুক্ত পথটি আপনার প্রকল্প ডিরেক্টরিতে শুরু হয় না । পরিবর্তে এটি "। / লাইব্রেরি" এ শুরু হয়! সুতরাং ফলাফলটি হ'ল:

#include "../test.hpp" ==> ./arduino/hardware/teensy/avr/libraries/test.hpp

উপসংহারে নিকটবর্তী ডিরেক্টরিতে আপনার নিজস্ব গাছ গাছ তৈরির কোনও পরিষ্কার উপায় নেই। একমাত্র কোর্স হ'ল আরডুইনো লাইব্রেরিতে আপনার কাজটি করা এবং সেই সাথে নিয়মগুলি সম্পর্কে সচেতন হওয়া aware


2

আমি কিছুক্ষণ দূরে থাকার পরে আরডুইনো ব্যবহার করতে ফিরে এসেছি এবং কিছুটা অনুরূপ ইস্যুতে বিস্মিত হয়েছি এবং বিভিন্ন সাইট থেকে এবং আদর্শের বিভিন্ন সংস্করণের জন্য বিভিন্ন তথ্য দ্বারা বিভ্রান্ত হয়েছি।

আমি যা পেয়েছি তা হ'ল যদি আপনার কোনও ডিরেক্টরিতে স্কেচ থাকে তবে আপনি .h, .cpp ... ডিরেক্টরিতে থাকা ফাইলগুলিকে আইডিটি বন্ধ করতে পারেন এবং আইডি, যখন পুনরায় চালু হবে তখন তাদের স্কেচ দিয়ে খুলবে।

ফাইলের নামের উপর সহজ কোট, কোনও পথ নেই, কোনও কোণ বন্ধনী ব্যবহার করে এগুলি অন্তর্ভুক্ত করুন।

আমি নিশ্চিত এটি সম্পূর্ণ উত্তরের একমাত্র অংশ, তবে এটি আমার শুরু করেছে।


2

আমি যতদূর জানি, আপনি আপনার গ্রন্থাগারগুলিকে তাদের নিখুঁত পথ ব্যবহার করে একটি কাস্টম অবস্থান থেকে অন্তর্ভুক্ত করতে পারেন।

যেহেতু নিখুঁত পাথগুলি কোড-বহনযোগ্যতার দৃষ্টিকোণ থেকে বিরক্তিকর হতে পারে, তাই আপনি প্রদত্ত কোনও আপেক্ষিকের কাছ থেকে পরম পাথ পেতে কিছু ম্যাক্রো সংজ্ঞায়িত করতে পারেন। এইভাবে, কোনও ডিভাইস থেকে অন্য যন্ত্রে যাওয়ার সময় আপনাকে কেবল 'প্রকল্পের রুট' পাথটি ঠিক করতে হবে।

আপনার প্রকল্পের মূল ফোল্ডারটি সংজ্ঞায়িত করুন:

    #define PROJECT_ROOT C:\path\to\your\project\folder

আপেক্ষিক-থেকে-পরম ম্যাক্রো 'রূপান্তর' সংজ্ঞা দিন:

    #define TO_STRING(s) #s
    #define ABSOLUTE_PATH(root, relative_path) TO_STRING(root\relative_path)
    #define RELATIVE_PATH(library) ABSOLUTE_PATH(PROJECT_ROOT, library)

আপেক্ষিক পথ ব্যবহার করে আপনার ফাইলগুলি অন্তর্ভুক্ত করুন:

    #include RELATIVE_PATH(some\file\relative\path.h)
    #include RELATIVE_PATH(another\file\relative\path.h)

আমি আশা করি এটি কার্যকর হবে।



2

আমি সম্প্রতি এই স্থানীয় গ্রন্থাগারের কাঠামোটি পরীক্ষা করেছি। এটি এর সাথে কাজ করে:

#include "libs/MyNewLib/MyNewLib.h"

আরডুইনো আইডিই ১.6..7 বিল্ড প্রি-প্রসেসিং এমনকি গ্রন্থাগারের জন্য উত্স কোডটিও গ্রহণ করবে।

চিয়ার্স!


1
1.6.7 এ নতুন হতে হবে
জেমস নিউটন

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

হুম আমি যে সমস্যাগুলি নিয়ে লিখেছিলাম সেগুলি পাথের সাথে সম্পর্কিত নয়। দেখা যাচ্ছে যে আরডুইনো আইডিই * .pp ফাইলগুলি ভালভাবে পরিচালনা করে না। এই আরডুইনো ফোরামের থ্রেডটি দেখুন
সেবাস্তিয়ান

উইন্ডোজে 1.8.1 এ আমার জন্য কাজ করে না।
ভায়োলেট জিরাফ

1

এটি করার সবচেয়ে সহজ উপায়টি হ'ল আপনার স্থানীয় স্কেচ ডিরেক্টরিতে লাইব্রেরিগুলি সঞ্চয় করা এবং [হোম] / আরডুইনো / লাইব্রেরি ডিরেক্টরিতে একটি প্রতীকী লিঙ্ক তৈরি করা। তারপরে আপনি আপনার স্কেচ / প্রকল্পের সাহায্যে এগুলিকে সহজেই গিটে চেক করতে পারেন এবং আরডুইনো এখনও খুশি কারণ গ্রন্থাগারগুলি বিশ্বব্যাপী ফোল্ডারে অ্যাক্সেসযোগ্য।

এমনকি একটি ইনস্টল স্ক্রিপ্টও তৈরি করুন যা এই লিঙ্কগুলি স্বয়ংক্রিয়ভাবে তৈরি করে এবং এটি গিটেও পরীক্ষা করে।


0

আরেকটি সত্যই খারাপ সমাধান - নামক একটি ফাইল তৈরি করুন libraries.cpp, যা এতে রয়েছে:

// force the linker to build the libraries
#include "libraries/LIB1/src/FILE1.cpp"
#include "libraries/LIB1/src/FILE2.cpp"
#include "libraries/LIB2/src/FILE1.cpp"

অবশ্যই, এটি কেবল তখনই কাজ করে যদি লাইব্রেরিতে নিজেই কোনও অন্তর্ভুক্ত না থাকে ...

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