2009-06-17 7 views
8

Non esattamente programmazione relativa ...permesso negato in esecuzione il mio programma (ubuntu)

Ho costruito il programma, alcuni opengl di base, quindi eseguirlo e sh:/il permesso blabla negato. Come posso fare quella dissaper?

il programma fa solo una piazza di rotazione e ho ubuntu 9.4

appena scoperto che anche int main() {} non funziona

+0

Quali sono le autorizzazioni per il file del programma? –

+0

Prova chmod 777: P – KdgDev

+0

Qual è esattamente il comando che stai inserendo? – Svante

risposta

1

paio di domande:

  1. Are le autorizzazioni impostate correttamente sul file?
  2. Il percorso di qualsiasi interprete è impostato correttamente?
+0

Non so di queste cose ... succede solo sul nuovo computer Ho avuto lo stesso compilaer stesso ubuntu e lì funziona solo – csiz

6

Come lo compili? Puoi pubblicare il makefile? Se esegui

chmod +x myPorgram 
./myProgram 

qualcosa cambia?

+0

Sto compilando con i codici. E non ho provato niente, ho provato con sudo e ancora niente. – csiz

1

Oltre al file chmod + x sopra menzionato, un altro problema potrebbe essere una libreria mancante. Per controllare le librerie richieste, l'uso ldd:

$ ldd /bin/sh 
    linux-vdso.so.1 => (0x00007fffb43fe000) 
    libc.so.6 => /lib/libc.so.6 (0x00007fc4abe11000) 
    /lib64/ld-linux-x86-64.so.2 (0x00007fc4ac183000) 

Se una di queste linee mostra una libreria mancante, saprete cosa deve essere installato prima di poter eseguire il programma.

Un'altra possibilità è se il programma è uno script (shell, perl, python o altro programma basato su testo). La prima linea si presenta come:

#!/usr/bin/perl 

Se il file non può essere trovato, si otterrà un errore di autorizzazione negata.

+0

non un eseguibile dinamico hmmm ma nella pagina dei permessi l'opzione eseguibile è marcata e anche io ho fatto il chmod + x su di esso ... Anche se dubito ci siano librerie aggiuntive necessarie per int main() {} – csiz

+0

"Non è un eseguibile dinamico "? Puoi mostrarci come stai compilando il tuo programma? Si prega di fare anche un "file yourexefile", questo dovrebbe dire qualcosa come $ file/bin/bash /bin/bash: ELF 64 bit LSB eseguibile, x86-64, versione 1 (SYSV), collegato dinamicamente (usi condivisi libs), per GNU/Linux 2.6.15, spogliato Per quanto riguarda le librerie extra, avendo solo main() {} non significa nulla, se è stato compilato con le librerie opengl, gli verrà richiesto di eseguire il programma . –

+0

Sto premendo il pulsante di compilazione nei blocchi di codice ... che ha funzionato sull'altro computer fino ad ora, ho anche compilato senza librerie collegate e non è stato eseguito. Il test del file: test: eseguibile LSB ELF a 32 bit, Intel 80386, versione 1 (SYSV), collegato dinamicamente (utilizza librerie condivise), per GNU/Linux 2.6.15, non spogliato – csiz

0

Provare a eseguire il comando con strace per tracciare le chiamate di sistema riuscite e dove si ferma.

In questo modo si potrebbe lanciarlo,

strace ./blabla 

si ottiene una "Autorizzazione negata" errore o qualcosa di simile "errore di formato exec"? Con chmod +rx sul file non si dovrebbe colpire il "permesso negato".

0

È inoltre necessario assicurarsi che il nome utente sia nel gruppo di video. Controlla il/etc/group e assicurati che il tuo nome utente appaia sulla riga "video".

5

Controllare il punto di montaggio per vedere se è montato come noexec eseguendo "mount"

1

si ottiene anche questo problema quando si tenta di eseguire le applicazioni a 32 bit su un sistema a 64 bit. Execute:

a. file (executable name) 
b. uname -a 

e controllare che entrambi siano "i386" o "amd64".

Se essi non sono la stessa cosa, dare un'occhiata a this article:

14

Ho avuto lo stesso problema e sembrava che la mia partizione è stata montata come noexec cat/etc/mtab

Quando ho configurato opzioni in/etc/fstab ho scritto exec, utente ma sembra che l'opzione "utente" imposta di default "noexec". Quando ho cambiato l'ordine di questi due per utente, exec è tornato alla normalità!

Spero che aiuti.

+2

+1 Risolto il mio problema! – jimifiki

2

Io uso CodeBlocks su Ubuntu e ho avuto questo esatto problema molte volte. quello che KermiDT ha detto è esattamente la soluzione (se avessi abbastanza punti rep, avrei votato)
L'opzione "utente" imposta di default "noexec".
quindi in/etc/fstab basta aggiungere, exec dopo utente. ad esempio il mio assomiglia a questo:
/dev/sda6 /media/DATA vfat uid=kenny,gid=kenny,users,user,exec 0 0
Tuttavia, la spaziatura è un po 'spenta ... ma si ottiene l'idea.