Çalıştırılabilir tuşum tıklandığında neden çalışmıyor?


3

Neden açamıyorum gibi görünüyor C ++ 'da oluşturulan çalıştırılabilir bir dosyayı çift tıklatarak açın.

Bir IDE'den koştuğum bir dosyam var ve bir dosyayı olup olmadığını bilmek için bir dosyayı olup olmadığını, bir dosyayı tıklatırken uçbirimde açacağım.

olasılıklar:

  • Kaynak koduma buna izin verecek bir C ++ kodu ekleyebilirim.

  • My Pc'yi açmak için yapılandırın.

Mümkün olduğunca araç kitlerinden kaçınmaya çalışıyorum Son zamanlarda Windows'ta bir uygulama derledim (Kuzenim sayesinde, pencereli bir bilgisayarı var)

Ve eğer Windows'ta Linux'ta da aynı şeyi yapabilseydiniz harika olurdu çünkü 2 Release's Folders'a sahibiz.

Ve bu basit Terminal tabanlı uygulamanın uzman olmak zorunda kalmadan çalışabilmesini istiyorum.


Bu satırı ekledim:

sistemi ( "gnome-terminal");

Terminalde açılır fakat sadece dosya yolunu göster, asıl programın önerisini değil.


@Leandro, ayrıntı eklemek veya yanıtlayanlara cevap vermek için "cevaplar" eklemek yerine, lütfen soruyu düzenleyin (ayrıntı eklemek için) veya "Yorum Ekle" yi kullanın (insanlara cevap vermek için vb.)
Marc Gravell

Yanıtlar:


6

Linux C ++ derleyicisi tarafından verilen dosyadaki "çalıştırılabilir" biti ayarlamanız gerektiğini umuyorum, güvenlik nedeniyle bunun varsayılan olarak yapıldığını sanmıyorum.

Oluşturduğunuz çalıştırılabilir dizininizdeki dizine "cd" yazın.

chmod +x myexecutable

"Myexecutable" ile derleyici çıktınızın adı değiştirilir.

Ardından ./myexecutable ile çalıştırmayı deneyin.

Bunun, farenin yanı sıra konsolun kullanılmasıyla programı "çalıştırılabilir" yapması gerektiğine inanıyorum.

Benzer şekilde, komutların bir "komut dosyasını" çalıştırmanız gerekirse, bir komut dosyasında aşağıdakileri deneyebilirsiniz, bunu "myexe.sh" veya benzeri bir şey olarak kaydedin:

#!/bin/sh
command1
command2

Sonra tekrar kullanın

chmod +x myexe.sh 

Böylece betiği tıklayarak çalıştırabilirsiniz.


@Leandro Netleştirmek için cevabımı düzenledim, programınızı basit bir komut dosyası kullanarak bir terminalde çalıştırabiliyor
olmalısınız

sarmalayıcı komut dosyası artık gereksiz
Lie Ryan,

@LieRyan Linux'un gui olmayan bir çalıştırılabilir için otomatik olarak bir terminal açıp açmayacağından emin değildim ve bundan emin olmak için oraya koydum ...
Mokubai

iyi ben sh olarak dosya uzantısı değiştirdi ve çalıştı
Leandro

@Mokubai bunu yapmak için bir terminal uygulaması kullanmanız gerekir. @Leandro bunun nedeni, pencere yöneticisi / dosya yöneticisinin bir terminalin içinde kabuk betiğini çalıştıracak şekilde yapılandırılmış olmasıdır. Bir bakıma, böyle bir bağımlı davranış, işleri yapmanın en uygun yolu değildir ...
bubu

3

Bence probleminizin kökü, bir Terminal Emulator ve Shell arasındaki farkı ve Linux'un nasıl işlem başlatılacağını çözemediğini anlamıyor olmanızdır.

İlk olarak, "Terminal Emülatörü" var, Gnome tabanlı ortamda bu genellikle Gnome Terminali.

Daha sonra "Kabuk" var, Linux'ta bu genellikle bash, ancak diğer mermiler de mümkün.

Bir "Kabuk", bir "Terminal Emulator" içinde çalışır. Bu ayrım, fiziksel bir Terminalin girdi alan donanım, renkli metinler vb. Yazdığı ve Shell'in kullanıcı komutunu işleyen ve verilen komutları temel alan diğer işlemleri yöneten bir yazılım olduğu fiziksel terminallerin çağından gelir.

Günümüzde, herhangi bir görüntüyü görüntüleyebilen genel amaçlı bir ekranımız var, bu yüzden artık fiziksel bir Terminal kullanmıyoruz, bunun yerine fiziksel terminallerin işini taklit eden bir yazılım olan "Terminal Emülatörlerine" ve halen Daha önce olduğu gibi aynı ole 'kabuğu (iyi, modern kabukları, bir kağıdın fiziksel sınırlaması ile sınırlı olmamak, fakat bölme kalıntısı gibi) bir yazılım terminali öykünücüsünde bulunmaktan faydalanır.

Bir "Kabuk" her zaman bir Terminal Emulator'da çalışmaz; Ayrıca Nautilus (ipucu ipucu, Nautilus, büyük kabuklu deniz canlılarının adıdır) veya Windows Gezgini (Internet Explorer ile karıştırılmaması) gibi Grafik Kabuk vardır.

Her iki komut satırı kabuğunda, örneğin bash ve grafik bir kabuk, örneğin Nautilus'ta, bir çalıştırılabilir executebit ayarına göre işaretlenir .

Bir komut satırı kabuğunda ls -lbir dosyanın izin bitlerini görüntülemek için kullanabilirsiniz , örneğin rwxrwxrwx, herkesin programı okuyabileceği / yazabileceği / çalıştırabileceği anlamına gelir; rwxr-xr-- sahibinin tam izne sahip olduğu, dosya grubundaki kişilerin okuyabileceği ve yürütebileceği ancak yazamayacağı ve diğerlerinin yalnızca dosyayı okuyabileceği anlamına gelir. Nautilus'ta, bir dosyaya> Özellikler> İzin sekmesine sağ tıklayın. İzin özellikleri sayfasında, dosyanın iznini komut satırı kabuğundaki gibi yapabilirsiniz.

Yürütme biti ayarlanmış bir dosya çalıştırılabilir olarak kabul edilir ve ./filename (komut satırı kabuğu) veya çift tıklatma (grafik kabuğu) yapılarak çalıştırılabilir.

Son olarak, bir kabuğun bir dosyayı nasıl yürüttüğü konusunda birkaç incelik daha vardır. Çoğu Linux kabuğunda, derlenmiş bir çalıştırılabilir olmayan python / perl / php / bash ile yazılmış bir betiği "çalıştırabilirsiniz". Bu dosyalar yerel olarak derlenebilir bir dosya olmadığından, çalıştırılmak için bir tercümana (örneğin python tercüman) ihtiyaç duyarlar. Dosya terkibini tercüman olarak belirleyen Windows kabuğundan (Explorer) farklı olarak; Linux kabukları, bu gibi görünen "hashbang" satırına bakarak doğru yorumlayıcıyı bulur.

#!/usr/bin/python

Bir dosyanın yürütme biti ayarlandığında ve dosyanın bu hashbang satırı olduğunda, kabuk, / usr / bin / python yorumlayıcısını argüman olarak geçerli dosya ile çağırır.

Nautilus ayrıca bir programın komut satırı uygulaması olduğunda tanıyabilir ve uygulamayı bir Terminal içinde çalıştırmanızı önerebilir. Yürütülebilir bir komut dosyasını çift tıklattığınızda, Nautilus bunu bir Terminal'de çalıştırmak, Terminal olmadan çalıştırmak veya dosyayı bir Metin Düzenleyicide düzenlemek isteyip istemediğinizi soracaktır.


1

Bir xterm veya başka bir şey içinde çalıştırmak için bir komut dosyası yapmak. Programınızın sonlandırmadan önce kullanıcıyla etkileşime girdiğinden emin olun. (Bir xterm içinde çalıştırdığınızda çalışıyor mu? Tipik bir bash kabuğunun içinde çalıştırdığınızda çalışıyor mu?)

xterm -e komutu [args1 args2]

Bana bu konuda biraz daha bilgi verebilir misiniz
Leandro

Peşinden demek istediğim, Terminal'i kastediyorsun ... üzgünüm bash ile pek aşina değilim. Sadece bir keresinde protestoyu renklendirmek için kullandım
Leandro

komut satırında linux metin modunda, bir kabuktur. En sık bash. Nadir durumlarda, varsayılan kabuk da tcsh veya zsh olabilir, ancak yine de bu nadirdir. X'te, metni içerecek pencereyi sağlamak için bir programa ihtiyacınız vardır, bu nedenle bir terminal penceresi genellikle örneğin bash çalıştıran bir gnome terminalidir.
bubu

1

Basit bir deyişle:

  1. Oluşturulan yürütülebilir ikili dosya çalıştırılabilir bit olmayabilir . Unix tabanlı sistemler bu özelliği güvenlik nedeniyle kullanır. İle ayarlayın: chmod +x yourbinary.
  2. İkili aslında idam edilebilir, ancak linux (biraz gibidir bir terminal emülatörü çalışmaz çünkü arayüzde Sizinle arasındaki stdoutvarsayılan olarak çalıştırmak için), bir şey görmek mümkün değildir.

İkinci durum için şunları yapabilirsiniz:

  1. Çalıştırılabilir durumunuzu bir uçbirim öykünücüsü aracılığıyla çalıştıran bir komut dosyası oluşturun:

    exo-open --launch TerminalEmulator -e 'yourbinary'
    

    Varsayılan terminalinizde çalıştırmak için ( exokomutunuz varsa) veya açıkça birini kullanın.

  2. desktopÇalıştırmak için bir dosya oluşturun .

  3. Onlara .exec, dosya uzantısı ayarlarınızdaki öneri 1. (veya benzeri) komutunu kullanarak çalışacakları gibi özel ve özel bir uzantı verin (işletim sisteminiz bu özelliği destekliyorsa).


0

Bunu pencerelerde derlediyseniz ve bu bir exe ise, çalıştırılabilir dosyayı çift tıklattığınızda terminalin pencerelerde açılmaması için hiçbir neden görmüyorum. Kodun kapanmadığından emin misiniz (segfault vs.)? Programın çökmediğinden emin olmak iyi bir fikirdir.


Windows üzerinde bir mükemmel bir pencere onun sırasıyla OS'de .exe sanki bunu açmanın bir yolunu bulabilirsiniz Linux üzerinde derlenmiş biridir işleri
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.