2013-01-05 17 views
14

Po prostu zacząłem programowanie w C++ i zdałem sobie sprawę, że musiałem wielokrotnie pisać ten sam kod (głównie funkcje narzędziowe).Tworzenie bibliotek współdzielonych w C++ dla OSX

Próbuję utworzyć bibliotekę współdzieloną i zainstalować ją w zmiennej PATH, aby móc korzystać z funkcji narzędziowych w dowolnym momencie.

Oto co zrobiłem do tej pory: -

Utwórz plik utils.h o następującej treści: -

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

Utwórz plik utils.cpp o następującej treści: -

#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; 
} 

Wykonaj czynności wymienione tutaj: - http://www.techytalk.info/c-cplusplus-library-programming-on-linux-part-two-dynamic-libraries/

  • Tworzenie biblioteki kodu wynikowego: g++ -Wall -fPIC -c utils.cpp

Ale jako link powyżej jest przeznaczone dla Linuksa to naprawdę nie działa na OSX. Czy ktoś mógłby zasugerować przeczytanie zasobów lub zasugerować, w jaki sposób mógłbym skompilować i ustawić te obiekty w ścieżce na maszynie OSX?

Ponadto, domyślam się, że powinien istnieć sposób, w jaki mogę dokonać tej wieloplatformowości (tj. Napisać zestaw instrukcji (skrypt bash) lub Makefile), aby móc go łatwo skompilować na różnych platformach. Jakieś wskazówki na ten temat?

+3

Tylko semi- odpowiednie, ale konwertowanie 'int' na ciąg' 0' i '1' jest łatwiejsze poprzez' std :: bitset': 'std :: string to_binary (int v) {return std :: bitset (v) .to_string();} ' –

+0

You don ' t potrzebujesz zainstalować 'libuki.so' w' $ PATH' ale tylko w '$ LD_LIBRARY_PATH' (np. być może w twoim '$ HOME/lib /') –

Odpowiedz

26

Zastosowanie -dynamiclib opcja kompilacji dynamicznej biblioteki na OS X:

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

a następnie używać go w swojej aplikacji klienckiej:

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

Powinieneś prawdopodobnie ustawić 'install_name' na' libutils.dylib' po zainstalowaniu – jww

8

Link, który wysłałeś, używa kompilatora C i C. Ponieważ jesteś budynku C++

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

Naprawdę chcesz przekazać '-fPIC' również przynajmniej na Linuksie –

+3

Powinieneś użyć opcji' -dynamiclib' na OS X zamiast '-shared'. – aponomarenko

Powiązane problemy