2010-10-27 31 views
1

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 et libILUT.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!

Répondre

1

je résolu le problème en modifiant la formule de bière à:

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 
+0

En fait, je rencontrais beaucoup de problèmes lors de la liaison de cette bibliothèque, rompt en quelque sorte la chose ... –

+0

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. –

+0

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. –