2013-01-05 11 views
14

Ho appena iniziato a programmare in C++ e mi sono reso conto che ho dovuto scrivere lo stesso codice più e più volte (per lo più funzioni di utilità).Creazione di librerie condivise in C++ per OSX

Quindi, sto cercando di creare una libreria condivisa e installarla in PATH in modo da poter utilizzare le funzioni di utilità ogni volta che ne ho bisogno.

Ecco che cosa ho fatto finora: -

Creare un file utils.h con il seguente contenuto: -

#include<iostream> 
#include<string> 
std::string to_binary(int x); 

Creare un file utils.cpp con il seguente contenuto: -

#include "utils.h" 

std::string to_binary(int x) { 
    std::string binary = ""; 
    while (x > 0) { 
    if (x & 1) binary += "1"; 
    else binary += "0"; 
    x >>= 1; 
    } 
    return binary; 
} 

Seguire i passaggi indicati qui: - http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-two-dynamic-libraries/

  • creare il codice oggetto libreria: g++ -Wall -fPIC -c utils.cpp

Ma, come il link qui sopra si intende per Linux in realtà non funziona su OSX. Qualcuno potrebbe suggerire di leggere risorse o suggerire suggerimenti su come potrei andare a compilare e impostare quegli oggetti nel percorso su una macchina OSX?

Inoltre, immagino che ci dovrebbe essere un modo per rendere questo multipiattaforma (cioè scrivere una serie di istruzioni (script bash) o un Makefile) in modo che possa essere usato per compilarlo facilmente attraverso le piattaforme. Qualche suggerimento su questo?

+3

Solo semi rilevante, ma la conversione di un 'int' in una stringa di' 0's e '1's è più semplice tramite' std :: bitset': 'std :: string to_binary (int v) {return std :: bitset (v) .to_string();} ' –

+0

Tu don ' t necessario installare il tuo 'libuki.so' nel tuo' $ PATH' ma solo nel tuo '$ LD_LIBRARY_PATH' (ad es. forse nel tuo '$ HOME/lib /') –

risposta

26

Usa -dynamiclib possibilità di compilare una libreria dinamica su OS X:

g++ -dynamiclib -o libutils.dylib utils.cpp 

e poi usarlo nella vostra applicazione client:

g++ client.cpp -L/dir/ -lutils 
+0

Probabilmente dovresti impostare 'install_name' su' libutils.dylib' una volta installato – jww

8

Il collegamento che hai postato utilizza C e il compilatore C. Dal momento che si stanno costruendo C++:

g++ -shared -o libYourLibraryName.so utils.o 
+0

Vuoi davvero passare '-fPIC' anche almeno su Linux –

+3

Dovresti usare l'opzione' -dynamiclib' su OS X invece di '-shared'. – aponomarenko

Problemi correlati