انجمنهای فارسی اوبونتو
کمک و پشتیبانی => نرمافزارهای فنی-مهندسی => نویسنده: PandoraTomorrow در 08 امرداد 1401، 03:03 بظ
-
سلام
من یه Solver جدید دارم که میخوام کامپایلش کنم (کدهای سالور رو خودم ننوشتم و فقط دانلود کردم و میخوام کامپایلش کنم و ازش استفاده کنم) ولی موقع کامپایل خطا میده.
من خیلی زیاد وارد نیستم و تازه اپن فوم رو شروع کردم. کاری که میکنم اینه که بعد از اینکه از حالت فشرده دراوردم فایل سالور رو، روی دستکاپ گذاشتم، از ترمینال وارد پوشه شدم و اول دستور wclean و بعدش wmake رو وارد میکنم ولی ارور میده که عکس ارور رو در انتها میذارم.
همین روش رو من برای فرضا حلگر icoFoam انجام دادم و معادله انرژی بهش اضافه کردم و با اسم جدید icoHeatFoam کار کرد و کامپایل شد ولی الان کار نمیکنه.
ممنون میشم کسی اگه میدونه بهم کمک کنه.
متشکرم.
(https://s6.uupload.ir/files/screenshot_280_abje.png)
-
از یه سرایند به نام naserMixture استفاده شده که نداریش
-
بله انگار همینه.
ممنون از پاسخت.
-
اون solver رو از کجا دریافت کردید؟ میتونید اسم یا لینکش رو قرار بدید؟
داخل اون دایرکتوری solver چه فایلهایی قرار داره؟ یه ls از اونجا بذارید.
-
سلام
اون solver رو از کجا دریافت کردید؟ میتونید اسم یا لینکش رو قرار بدید؟
داخل اون دایرکتوری solver چه فایلهایی قرار داره؟ یه ls از اونجا بذارید.
اون Solver مال یه پروژه بود که از سایت مارکت کد تهیه کردم. لینک دانلودش:
https://www.uplooder.net/files/e82fcfb5ff3115cb9ef83d1b14f0474e/Non-NMixtureFoam.rar.html
تصویر فایل های داخل دایرکتوری:
(https://www.uplooder.net/img/image/43/9af0c6728c9ad736ae34ae50a61da51a/Screenshot-293.png)
همونطور که بالا تر مشخص شد، این سالور یه فایل هدر به نام naserMixture رو نداشت برای کامپایل شدن. با پیگیری هایی که کردم از پشتیبانی سایت مربوطه، تونستم فایل هدر رو مجزا بگیرم. الان دیگه ارور قبلی که تو پست اول گذاشتم رو نمیده ولی یه ارور جدید میده:
(https://www.uplooder.net/img/image/79/93339900cd5acec7e57247448ded7ebe/Screenshot-292.png)
کاری که کردم این بود که فایل naserMixture.H رو تو پوشه Solver ام که توی دسکتاپ هست کپی کردم و فرامین wclean و wmake رو اجرا کردم و این ارور رو گرفتم.
خود پشتیبانی سایت یه سری توضیح داد که چطور نصب کنم که میفرستم:
"برای اینکه بتوانید از پروژه به درستی استفاده کنید؛ بایستی کتابخانه مذکور را به درستی و در محل مناسب نصب کنید. بعنوان مثال این عکس محل جایگذاری این کتابخانه را نشان میدهد. باید دقیقا در این محل نصب بشه.
(https://www.uplooder.net/img/image/5/e9213b7fa6c601b47901c45bfc091fa7/WhatsApp-Image-2022-08-15-at-12.12.58-PM.jpeg)
بعد از آنکه نصب شد باید فایل dep را به کاربر بدهد. البته لازم بذکر است که قبل از نصب کتابخانه بهتر است که این dep موجود در پوشه پاک بشود.
(https://www.uplooder.net/img/image/14/b602afaf2f25f8f0cd249b21ee29cbc8/WhatsApp-Image-2022-08-15-at-12.17.33-PM.jpeg)
"
یه فایل هم برام فرستادن که علاوه بر هدر naserMixture.H، چند تا فایل دیگه با همین نام و پسوند C. و dep. هم داره (فایلهای تصویر بالا). اون رو هم آپلود میکنم:
https://www.uplooder.net/files/02c3bda8d0b661e4ca28d3dd0e503f6c/naserMixture.rar.html (https://www.uplooder.net/files/02c3bda8d0b661e4ca28d3dd0e503f6c/naserMixture.rar.html)
من چون تازه کارم متوجه نمیشم منظورش از نصب کتابخانه چیه! کسی میتونه توضیح بده دقیقا باید چیکار کنم؟ صرف کپی کردن فایلای C. و dep. در پوشه src/transportModels/incompressible کافی نیست؟ باید نصب هم بشه؟ اگه آره چطور؟
من فایل کامل Solver رو گذاشتم (فایل اولی که آپلود کردم به نام Non-NMixtureFoam)، فایل حاوی کتابخونه و هدر و ... هم که کم بود و بعدا بهم دادن رو هم گذاشتم (فایل آخری که آپلود کردم به نام naserMixture). کسی میتونه این فایل ها رو دانلود کنه و خودش اقدام کنه Solver رو کامپایل کنه و اگه مشکلی نداشت و کامپایل شد، قدم به قدم با جزییات بیشتر به من توضیح بده باید چکار کنم؟
پیشاپیش ممنونم اگه میتونید کمک کنید.
-
openfoam رو از مخازن دبیان نصب کردم ولی دستورات wclean و wmake همراه اون بسته نبودند. به نظر میاد هیچ بستهای توی مخازن دبیان، شامل فایل اجرایی این دستورات نیست.
یکم جستوجو کردم و انگار openfoam که توی مخازن دبیان هست، ناکامله. یا حداقل چیزهایی که برای کامپایل solver لازم هست رو همراهش نداره.
به همین دلیل نتونستم اون solver رو کامپایل کنم.
از خطایی که گرفتید، مشخصه کار توی مرحله لینک کردن به مشکل خورده.
تبدیل کد c به برنامه اجرایی، معمولا توی ۴ مرحله انجام میشه.
۱- توی مرحله اول، پیشپردازنده (preprocessor) c اجرا میشه. این پیشپردازنده، ربط خاصی به پردازنده اصلی سیستم نداره. توی این مرحله، در واقعیت فقط متن برنامه تغییر میکنه.
توی این مرحله، comment ها حذف و دستورات preprocessor اجرا میشن.
معمولا توی کد، دستورات preprocessor با علامت # آغاز میشن.
خروجی این مرحله، همچنان متن هست که به عنوان کد c شناسایی میشه.
۲- توی مرحله دوم، کامپایلر، متن پیشپردازش رو میگیره و اون رو به کد اسمبلی تبدیل میکنه.
خروجی این مرحله همچنان متن هست؛ ولی به عنوان کد اسمبلی شناخته میشه.
۳- توی مرحله بعد، اَسِمبلِر (assembler) اجرا میشه. اسمبلر، کد اسمبلی که توی مرحله قبلی تولید شده بود رو میگیره و اون رو به فایل دودویی (binary) تبدیل میکنه.
برخلاف دوتا مرحله قبلی، خروجی این مرحله، متن نیست، یه object code هست.
ممکنه بعضی جاها، مرحله دوم و سوم رو یکی حساب کنند.
در بیشتر موارد، خروجی این مرحله قابل اجرا نیست چون معمولا برنامهها از توابع کتابخانهای استفاده کردند و لازمه برای اینکه بتونند کار کنند، با اون توابع کتابخانهای لینک بشن.
البته ممکنه وقتی فرایند به این مرحله میرسه، مرحله آخر اجرا نشه. بلکه object code تولید شده، کنار یکی یا چنتا object code دیگه قرار بگیره و بعد مرحله چهارم انجام بشه.
۴- در مرحله آخر، لینکر (linker) اجرا میشه.
ممکنه object code تابعهایی رو فراخوانی که همراهش نیستند. ممکنه اون توابع همراه object code های دیگه باشن یا داخل کتابخانههای سیستمی باشه یا ...
به همین دلیل لازمه یه کاری انجام داد تا به اون توابع دسترسی پیدا کرد.
کار لینکر این هست که چیزهای مورد نیاز رو به object code اضافه کنه.
فکر کنم کدهای ++c هم همین مراحل رو طی میکنند.
مشکل شما توی مرحله لینک کردن اتفاق افتاده.
انگار یه چیزی توی کد declare شده ولی define نشده. در ادامه توی تابع main، از اون همون چیز استفاده شده. از اونجایی که اون چیز declare شده، توی مرحله کامپایل مشکلی پیش نمیاد. ولی موقع لینک کردن، باید به اون چیز دسترسی وجود داشته باشه تا لینکر بتونه کارش رو انجام بده.
انگار defenition اون چیز، داخل فایل naserMixture.C وجود داره؛ ولی مطمئن نیستم. اگه این فرض درست باشه، احتمالا با کامپایل این فایل همراه solver و دادن فایل بدست اومده به لینکر توی مرحله لینک کردن، مشکل حل میشه.
ولی نمیدونم چجوری میشه اینکار رو کرد.
ممکن هم هست فرض بالا اشتباه باشه و مشکل کلا مربوط به یه چیز دیگه باشه.
-
openfoam رو از مخازن دبیان نصب کردم ولی دستورات wclean و wmake همراه اون بسته نبودند. به نظر میاد هیچ بستهای توی مخازن دبیان، شامل فایل اجرایی این دستورات نیست.
یکم جستوجو کردم و انگار openfoam که توی مخازن دبیان هست، ناکامله. یا حداقل چیزهایی که برای کامپایل solver لازم هست رو همراهش نداره.
به همین دلیل نتونستم اون solver رو کامپایل کنم.
از خطایی که گرفتید، مشخصه کار توی مرحله لینک کردن به مشکل خورده.
تبدیل کد c به برنامه اجرایی، معمولا توی ۴ مرحله انجام میشه.
۱- توی مرحله اول، پیشپردازنده (preprocessor) c اجرا میشه. این پیشپردازنده، ربط خاصی به پردازنده اصلی سیستم نداره. توی این مرحله، در واقعیت فقط متن برنامه تغییر میکنه.
توی این مرحله، comment ها حذف و دستورات preprocessor اجرا میشن.
معمولا توی کد، دستورات preprocessor با علامت # آغاز میشن.
خروجی این مرحله، همچنان متن هست که به عنوان کد c شناسایی میشه.
۲- توی مرحله دوم، کامپایلر، متن پیشپردازش رو میگیره و اون رو به کد اسمبلی تبدیل میکنه.
خروجی این مرحله همچنان متن هست؛ ولی به عنوان کد اسمبلی شناخته میشه.
۳- توی مرحله بعد، اَسِمبلِر (assembler) اجرا میشه. اسمبلر، کد اسمبلی که توی مرحله قبلی تولید شده بود رو میگیره و اون رو به فایل دودویی (binary) تبدیل میکنه.
برخلاف دوتا مرحله قبلی، خروجی این مرحله، متن نیست، یه object code هست.
ممکنه بعضی جاها، مرحله دوم و سوم رو یکی حساب کنند.
در بیشتر موارد، خروجی این مرحله قابل اجرا نیست چون معمولا برنامهها از توابع کتابخانهای استفاده کردند و لازمه برای اینکه بتونند کار کنند، با اون توابع کتابخانهای لینک بشن.
البته ممکنه وقتی فرایند به این مرحله میرسه، مرحله آخر اجرا نشه. بلکه object code تولید شده، کنار یکی یا چنتا object code دیگه قرار بگیره و بعد مرحله چهارم انجام بشه.
۴- در مرحله آخر، لینکر (linker) اجرا میشه.
ممکنه object code تابعهایی رو فراخوانی که همراهش نیستند. ممکنه اون توابع همراه object code های دیگه باشن یا داخل کتابخانههای سیستمی باشه یا ...
به همین دلیل لازمه یه کاری انجام داد تا به اون توابع دسترسی پیدا کرد.
کار لینکر این هست که چیزهای مورد نیاز رو به object code اضافه کنه.
فکر کنم کدهای ++c هم همین مراحل رو طی میکنند.
مشکل شما توی مرحله لینک کردن اتفاق افتاده.
انگار یه چیزی توی کد declare شده ولی define نشده. در ادامه توی تابع main، از اون همون چیز استفاده شده. از اونجایی که اون چیز declare شده، توی مرحله کامپایل مشکلی پیش نمیاد. ولی موقع لینک کردن، باید به اون چیز دسترسی وجود داشته باشه تا لینکر بتونه کارش رو انجام بده.
انگار defenition اون چیز، داخل فایل naserMixture.C وجود داره؛ ولی مطمئن نیستم. اگه این فرض درست باشه، احتمالا با کامپایل این فایل همراه solver و دادن فایل بدست اومده به لینکر توی مرحله لینک کردن، مشکل حل میشه.
ولی نمیدونم چجوری میشه اینکار رو کرد.
ممکن هم هست فرض بالا اشتباه باشه و مشکل کلا مربوط به یه چیز دیگه باشه.
سلام
واقعا ممنونم از وقتی که گذاشتی و توضیحاتی که دادی.
یه مدته دارم رو فرضیات شما کار میکنم که ببینم مشکل حل میشه یا نه ولی متاسفانه هنوز حل نشده. واقعا دیگه نمیدونم باید چکار کنم.
اگه معجزه ای شد و مشکل حل شد میگم شاید بعدا به درد کسی خورد.
بازم ممنون.