سؤال

أنا أقوم بتشغيل تطبيق GLFW (لقد كتبت في C ++)

أركضه على النحو التالي:

./prog.app/Contents/MacOS/prog # from the command line

ومع ذلك، لا يمكن لرمزي قراءة الملفات المسجحة النسبية بشكل صحيح.

لذلك أعتقد أن ما يحدث هو أن حزمة ماك هذه تغيير الدليل الحالي الخاص بي.

1) ما الذي يغيره إليه؟ 2) هل يمكنني التحكم في هذا؟

شكرا!

هل كانت مفيدة؟

المحلول

لا تجعل أي افتراضات حول دليل العمل الحالي عند إطلاق تطبيقك. الباحث يتفق بشكل معقول حول هذا ولكنه ليس هو السبيل الوحيد لإطلاق تطبيق. عند تصحيح الأخطاء تحت XCode على سبيل المثال، سيكون دليل العمل الأولي مختلفا، وهناك طرق أخرى مختلفة قد تقوم أو لا تحدد دليل العمل كما هو متوقع. يجب عليك اختبار التطبيق الخاص بك عن طريق تشغيله من سطر الأوامر في دليل غير مرتبط تماما - إذا كان لا يزال يجد ملفاته ضمن هذا الشرط، فأنت في حالة جيدة.

نصائح أخرى

قد تكون قادرا على استخدام هذه القطعة لمعرفة موقع بروغ.

#include <mach-o/dyld.h>

char exe_path[MAXPATHLEN];
char link_path[MAXPATHLEN];

uint32_t size = sizeof(exe_path);
if (_NSGetExecutablePath(exe_path, &size) != 0)
    assert();

if (realpath(exe_path, link_path) == 0)
    assert();

return link_path; 

في كثير من الأحيان هو الدليل الرئيسي للمستخدم. لست متأكدا مما إذا كان ذلك مضمونا، ولكن يمكنك استخدام Chdir () داخل تطبيقات Cocoa. اعتمادا على متطلباتك، قد يكون للمستخدمين تجربة أفضل إذا كنت تستخدم إشارات مرجعية النظام (10.6+) أو الأسماء المستعارة (في وقت سابق). أو حتى المسارات المطلقة، التي لا تزال قوية ضد تغيير دليل العمل.

إذا نظرت إلى مصادر GRFW، فسترى أنه على OSX أثناء IND يغير الدليل الحالي بشكل صريح. انظر هنا والتمرير لأسفل إلى حوالي السطر 236 (أو البحث عن Chdir).

لقد وجدت سؤالك حتى الآن لأنني أحاول حاليا أن أفهم لماذا يقوم GRFWW بتشغيل صريحة أثناء INIT. اكتشفت ذلك لأن لدي برنامج يعمل على جميع المنصات باستثناء OSX. على OSX لا يمكن العثور على ملفات البيانات الخاصة بها باستخدام مسار نسبي. الحل المؤقت هو الحصول على الدليل الحالي عند بدء تشغيل الصفحة الرئيسية وإعادة تعيين الدليل الحالي بعد تهيئة grafw.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top