Evet, hatta baska bir baslikta bizzat ben belirtmistim :)
Ama benim merak ettigim dosyanin icerigi. Iki platformun da calistirmayi denemesinden ziyade, ikisinin de calistirabildigi formatin ne oldugunu merak ediyorum :)
Windows son baktigimda (15 sene kadar once) NE ve PE destekliyordu. Linux’ta binfmt mekanizmasini saymazsak bir tek elf ve #! script’lerini biliyorum. (Simdi baktim, a.out varmis ve #!binfmt'la oluyormus—ama ikincisi POSIX standardi.)
Bi de COM ve BAT var…
COM dosyalari dogrudan x86 assembly kodu oldugu icin baya bir esneklik var —sadece ASCII yazi karakterlerinden olusan COM programi yazdigimi hatirliyorum— #!/'in filan hangi opcode’lara denk geldigine bakasim var ama tutuyorum kendimi :).
Demek ki bir üst mesajda gösterilen yöntemle oluşturulan exe dosyaları ancak bilgisayarda Python yüklü olduğu sürece çalışıyor. Veya daha başka bir yöntem izlemek gerek.
Daha önce böyle bir çalışma yapmadım. Ancak dediğim gibi eğer C ile program geliştirecekseniz ve Python’u kullanmak istiyorsanız bunu yapmanın en sağlıklı yolu budur diye düşünüyorum.
Şunu sormak istiyorum. Dll ile beraber baska bir sey dağıtmak gerekmiyor mu? Mesela standart kütüphaneler. Bu konuyla ilgili örnek içeren link paylaşabilir misiniz acaba?
Ben genel executable calistirmadan bahsediyorum. Gereken kutuphaneler import section’inda yazar. DLL’lerin de import section’lari vardir.
Spesifik olarak Python’in DLL’i nasil calisiyor, ne istiyor bilmiyorum. Yukarida alinan hata Windows hatasi, cozumu DLL’i EXE’nin yanina veya PATH’e koymak.
Link olarak; statik kutuphane nereden bulunur ona baktim, 2-3 cevap “Windows’da cok zor”, bir tanesi ise “su oyun motorumda submodule olarak yer alan bir proje Python’i Windows’ta compile ediyor, onu kullanin isterseniz” gibi bir sey diyordu, cok kurcalamadim.
Geriye kalan bilgiler senin yolladigin linkte var zaten. (Compile/link asamalari nasil calisiyor, executable loader ne yapiyor yan bilgileriyle.)
It is not necessarily trivial to find the right flags to pass to your compiler (and linker) in order to embed the Python interpreter into your application, particularly because Python needs to load library modules implemented as C dynamic extensions ( .so files) linked against it.
Bir suru standart kutuphane modulleri dinamik formatta: