2016-03-29 26 views
1

gibi ana giriş noktasını içeren bir kitaplık nasıl oluşturulur? SDL kendi implantasyonunda bir WinMain'e sahiptir ve SDL_main işlevini bildirir. Kullanıcı, o fonksiyonun gövdesini tanımlayabilir ve SDL kütüphanesindeki giriş noktası bu fonksiyonu çağırır.C++ içinde SDL

Aynı uygulama ile bir kitaplık uygulamak istiyorum. Peki, C++ 'da giriş noktasını içeren bir kütüphaneyi nasıl oluşturabilirim ve kullanıcıya tanımlandıktan sonra SDL'nin yaptığı gibi bir işlev prototipini veririm.

olası bir uygulaması olabilir:

Lib.hpp:

#define Main lib_main 
extern int lib_main(); 

Lib.cpp:

#include "lib.hpp" 

int main(){ 
    // the lib code runs here 
    lib_main(); 
} 

yapı Öyle gibi kullanabileceğiniz bu kitaplık sonra:

main.cpp

#include "lib.hpp" 
int Main(){ 
    // The user code 
} 

O komutla Lib.cpp derleme olamaz:

gr ++ -shared lib.cpp -o Lib.dll -Wl, - out-implib, libLib.a

o olsun bana lib_main() için tanımlanmamış bir başvuru.

Pencereleri kullanıyorum.

+0

'int Main() {...}' int lib_main() olarak genişleyecektir;() {...} 'Lib.hpp – AJNeufeld

+0

içinde '# define' öğesini güncellemek isteyebilir. Teşekkürler –

+0

[Bir programın giriş noktasını değiştirmek] için yapı bayraklarıyla mümkündür (http: // stackoverflow.com/questions/7494244/nasıl yapılır-change-entry-point-of-c-program-with-gcc) ama kendi sorunuzu cevapladığınızdan başka. – Matt

cevap

3

Platformunuzu belirtmediniz, ancak GCC kullanıyorsanız kodunuz çalışır.

şöyle statik kitaplık derleme:

g++ -c -o Lib.o Lib.cpp 
ar rcs libLib.a Lib.o 

şöyle ana program derleme:

g++ -L. -lLib -o main main.cpp 

VEYA

şöyle * için nix paylaşılan kütüphane derlemek:

g++ -shared -o libLib.so Lib.cpp 

ana program şöyle derleyin:

g++ -L. -lLib -o main main.cpp 

VEYA

şöyle Windows için paylaşılan bir kütüphane ve bir alma kitaplığı derleme:

g++ -shared -o libLib.dll --Wl,--out-implib,libLib_dll.a Lib.cpp 

şöyle ana programı derlemek, içe aktarma kitaplığına karşı bağlama ve geçerli dizini çalışma zamanı arama yoluna ekleme:

g++ -L. -lLib_dll -Wl,-rpath,. -o main main.cpp 
+0

Cevabınız için teşekkürler. Denedim ve işe yarıyor. Ama işte bu şey. Bu komutları, paylaşılan ve statik kitaplıkları oluşturmak için yaptığımda: g ++ -c Lib.cpp g ++ -shared -o Lib.dll Lib.o -Wl, - out-implib, libLib.a g ++ main.cpp -o ana -L. -lLib Sadece .a ve gerçek ana programı derler, ancak .dll yapmaz. Program, bir dll dosyası olmadığı için yürütülemiyor. Farkı biliyor muydunuz? –

+0

Hem statik hem de paylaşılan kitaplıklar oluşturmaya çalışıyorsunuz gibi görünüyor. Statik kitaplığı, paylaşılan kitaplık için içe aktarma kitaplığı ile karıştırmamaya dikkat edin. Güncellenmiş cevabımı kontrol et. – Chaos