باستخدام مكتبة ديناميكية (Devil/Openil) في مشروع Xcode
-
26-09-2019 - |
سؤال
أحاول تجميع مثال رمز المصدر الذي يستخدم OpenGL و SDL و IL و AKA Devil AKA Openil Libraries. OpenGL و SDL متاحان كأطر أصلية ، لكن الشيطان ليس كذلك. إذن هذا ما فعلته:
لقد قمت بتثبيت الشيطان عبر homebrew. أولاً ، قمت بتغيير الصيغة ، لأنني بحاجة إلى ilut:
brew edit devil
ثم تم تحرير هذه الخطوط
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}", "--enable-ILU"
system "make install"
end
مثل ذلك
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}", "--enable-ILU", "--enable-ILUT"
system "make install"
end
وتثبيت كل شيء مع
[sudo] brew install devil
الذي يعطيني رؤوس الشيطان في /usr/local/include/
والمكتبات الديناميكية في /usr/local/lib/
. بعد ذلك ، أضفت المكتبات إلى مشروعي بالخطوات التالية:
- انقر بزر الماوس الأيمن على هدفي الوحيد
- انقر فوق "إضافة> الأطر الحالية"
- حدد "Dylibs"
- يضيف
libIL.dylib
,libILU.dylib
وlibILUT.dylib
(هناك أيضا libIL.1.dylib
, libILU.1.dylib
و libILUT.1.dylib
متاح في القائمة ، هل هذا طبيعي؟)
ثم أضفت الأعلام التالية في "Project> تحرير إعدادات المشروع> إنشاء> أعلام الارتباط الأخرى":
-lil -lilu -lilut
عندما أحاول تجميع المشروع وربطه ، أحصل على الأخطاء التالية:
Ld "build/Debug/XCode OpenGL OOP Framework.app/Contents/MacOS/XCode OpenGL OOP Framework" normal i386
cd "/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework"
/Developer/usr/bin/g++-4.2 -arch i386 "-L/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework/build/Debug" "-F/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework/build/Debug" -filelist "/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework/build/XCode OpenGL OOP Framework.build/Debug/XCode OpenGL OOP Framework.build/Objects-normal/i386/XCode OpenGL OOP Framework.LinkFileList" -framework Foundation -framework AppKit -framework GLUT -framework OpenGL -framework SDL -lIL -lILU -lILUT -o "/Users/padde/Documents/Studium/sem5/computergrafik/opengl intro/xcode projects/XCode OpenGL OOP Framework/build/Debug/XCode OpenGL OOP Framework.app/Contents/MacOS/XCode OpenGL OOP Framework"
ld: warning: in /usr/local/lib/libIL.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /usr/local/lib/libILU.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
ld: warning: in /usr/local/lib/libILUT.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
Undefined symbols:
"_ilInit", referenced from:
RenderEngine::initManagers() in RenderEngine.o
"_ilGetData", referenced from:
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
"_ilBindImage", referenced from:
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
"_ilLoadImage", referenced from:
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
"_ilGenImages", referenced from:
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
"_ilGetInteger", referenced from:
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
"_ilDeleteImages", referenced from:
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
TextureManager::loadTexture(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned int, unsigned int, unsigned int, bool, bool)in TextureManager.o
"_main", referenced from:
start in crt1.10.6.o
(maybe you meant: _SDL_main)
ld: symbol(s) not found
collect2: ld returned 1 exit status
على ما يبدو ، .dylib
لا يتم بناء الملفات بشكل صحيح ونتيجة لذلك لا يتم العثور على الرموز ، ولكن كيف يمكنني القيام بهذا العمل؟ هل ارتكبت أي أخطاء؟ هل هناك طريقة لبناء المكتبات بشكل مختلف حتى تعمل مع مشروعي ، أو هل يمكنني تغيير بنية بناء مشروعي بطريقة أو بأخرى؟
شكرا جزيلا لكم على مساعدتكم!
المحلول
لقد حللت المشكلة عن طريق تحرير صيغة المشروب إلى:
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}", "--enable-ILU", "--enable-ILUT",
"CFLAGS=-arch i386", "CXXFLAGS=-arch i386"
system "make install"
end