J'essaie de compiler un exemple de code source qui utilise les bibliothèques OpenGL, SDL et IL aka DevIL aka OpenIL. OpenGL et SDL sont disponibles en tant que frameworks natifs, mais DevIL ne l'est pas. Donc voici ce que j'ai fait:Utilisation d'une bibliothèque dynamique (DevIL/OpenIL) dans un projet Xcode
J'ai installé DevIL via homebrew. Tout d'abord j'ai changé la formule, parce que je besoin ILUT:
brew edit devil
alors modifié ces lignes
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}", "--enable-ILU"
system "make install"
end
comme si
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}", "--enable-ILU", "--enable-ILUT"
system "make install"
end
et installé tout avec
[sudo] brew install devil
qui me donne le DevI L en-têtes dans /usr/local/include/
et les bibliothèques dynamiques dans /usr/local/lib/
. Ensuite, j'ai ajouté les bibliothèques à mon projet avec les étapes suivantes:
- Faites un clic droit sur ma seule cible
- Cliquez sur « Ajouter> Cadres existants »
- Sélectionnez « dylibs »
- Ajouter
libIL.dylib
,libILU.dylib
etlibILUT.dylib
(il y a aussi libIL.1.dylib
, libILU.1.dylib
et libILUT.1.dylib
disponible dans la liste, est que la norme ? Al)
Puis j'ai ajouté les drapeaux suivants dans « Projet> Modifier les paramètres du projet> Construire> Autres drapeaux linker »:
-lil -lilu -lilut
Quand je tente de compiler et lier le projet que je reçois les erreurs suivantes:
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
apparemment, les fichiers .dylib
ne sont pas correctement construit et par conséquent les symboles ne sont pas trouvés, mais comment puis-je faire ce travail? Ai-je fait des erreurs? Existe-t-il un moyen de créer les bibliothèques différemment afin qu'elles fonctionnent avec mon projet, ou puis-je modifier l'architecture de construction de mon projet d'une manière ou d'une autre?
Merci beaucoup pour votre aide!
En fait, je rencontrais beaucoup de problèmes lors de la liaison de cette bibliothèque, rompt en quelque sorte la chose ... –
Pouvez-vous me envoyer les bibliothèques s'il vous plaît? Vous pouvez trouver mon adresse e-mail dans ma boîte de description. –
désolé, je ne les ai plus. Il suffit d'installer homebrew à partir de https://github.com/mxcl/homebrew puis tapez 'brew install devil' dans votre fenêtre de ligne de commande. Si vous avez besoin de la configuration standard, cela devrait fonctionner parfaitement. –