2010-12-10 21 views
2

Quelle est la méthode la plus simple pour créer et utiliser un fichier .dylib dans Xcode?Création et utilisation d'un fichier .dylib simple

Voici ce que j'ai jusqu'à présent:

fichier: malib.h

#include <string> 

namespace MyLib 
{ 
    void SayHello(std::string Name); 
} 

fichier: MyLib.cpp

#include <string> 
#include <iostream> 

#include "MyLib.h" 

void MyLib::SayHello(std::string Name) 
{ 
    std::cout << "Hello, " << Name << "!"; 
} 

Je suis le projet de compilation comme une bibliothèque dynamique, mais comment l'utiliser avec d'autres projets? J'ai essayé quelque chose comme ceci:

fichier: MyLibTester.cpp

#include "libMyLib.dylib" 

int main() 
{ 
    MyLib::SayHello("world"); 
    return 0; 
} 

Mais cela m'a donné plus de 400 erreurs (principalement le long des lignes de Stray \123 in program utilisant <libMyLib.dylib> m'a donné une erreur file not found

Répondre

2

Vous ne pas inclure le fichier de bibliothèque, mais l'en-tête (.h)

donc écrire

#include "MyLib.h"

Vous devez alors indiquer au compilateur de votre programme pour lier contre le dylib fichier. Si vous utilisez Xcode, vous pouvez simplement faire glisser le fichier dylib dans votre projet.

0
..

FWIW mon compilateur de production utilise:

/usr/bin/g++ -c -fno-common -fPIC -Wall \ 
-Wno-invalid-offsetof -Wfatal-errors -fPIC \ 
-O3 -fomit-frame-pointer --inline -DTARGET_BUILD \ 
-I/usr/local/lib/felix/felix-1.1.6rc1/lib/rtl \ 
-I/usr/local/lib/felix/felix-1.1.6rc1/config/target \ 
./hello.cpp -o ./hello.os 

/usr/bin/g++ -fno-common -dynamiclib -O3 \ 
-fomit-frame-pointer --inline \ 
./hello.os -o ./hello.dylib \ 
-L/usr/local/lib/felix/felix-1.1.6rc1/lib/rtl \ 
-lflx_dynamic -lflx_gc_dynamic -lflx_judy_dynamic -lflx_exceptions_dynamic 

à m ake hello.dylib de hello.cpp, vous pouvez supprimer les bits non essentiels, qui sont là juste parce que c'est ce qui est là dans mon système et pourrait vous aider si vous voulez faire un peu plus de choses avancées plus tard. Le -fPIC dans la compilation est obligatoire. Le -dynamiclib est ce qui rend le dylib.