Использование динамической библиотеки (DevIL/OpenIL) в проекте Xcode
Я пытаюсь скомпилировать пример исходного кода, который использует библиотеки OpenGL, SDL и IL или DevIL или OpenIL. OpenGL и SDL доступны как собственные фреймворки, а DevIL - нет. Итак, вот что я сделал:
Я установил DevIL через доморощенный. Сначала я изменил формулу, потому что мне нужен 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
доступно в списке, это нормально?)
Затем я добавил следующие флаги в "Проект> Изменить настройки проекта> Сборка> Другие флаги компоновщика":
-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
файлы создаются неправильно, и в результате символы не обнаруживаются, но как я могу заставить эту работу работать? Я сделал какие-нибудь ошибки? Есть ли способ построить библиотеки по-другому, чтобы они работали с моим Проектом, или я могу как-то изменить архитектуру сборки своего проекта?
Спасибо большое за вашу помощь!
1 ответ
Я решил проблему, отредактировав формулу варева:
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