2016-02-06 12 views
-3

Hello :)

В настоящее время я изучаю SDL2, и я сделал несколько программ с ним. С этими программами, когда я дважды нажимаю на исполняемый файл, программа запускается, и все в порядке. В последней программе, которую я сделал, она больше не работает. С этим я могу только запустить с терминала. У exe есть разрешения, поэтому у них нет причин для этого ...Не удается запустить SDL2, выполнив двойной щелчок

Единственное, что я изменил, это то, что старый файл общих функций, который я использовал (для таких вещей, как loadTextureFromImage() "...), динамическую библиотеку, которую я создал. Вот ссылка на весь проект (сейчас только белое окно) ->RightHere.

Я в настоящий момент работает Ubuntu 14.04.

Если у вас есть представление о том, почему это не работает только для ЭТОГО проекта, скажите, пожалуйста!

Заранее спасибо;)

PS: Вот проект, который на самом деле работает ->RightHere

PS2: Проекты в с


Хорошо, так что я сделал ldd ./myprog, и связанные с ними библиотеки - вот где я их помещаю в «$ {HOME}/lib». Если я хорошо понял, вы говорите мне, что, поскольку эти библиотеки не находятся в «/ usr/lib и т. Д. ...», они не будут найдены, и я должен написать сценарий. Я немного забыл сказать: мне пришлось добавить переменную окружения в моем .bashrc ->export LD_LIBRARY_PATH=${HOME}/lib, чтобы библиотеки находились во время компиляции. Из-за того, что вы сказали, я думаю, что эта переменная загружается только в терминалы, не так ли? Так что я попробовал два сценария:

#!/bin/bash 

LD_LIBRARY_PATH=$PWD 

./myprog

(как вы сказали) и

#!/bin/bash 

LD_LIBRARY_PATH=${HOME}/lib 

./myprog

(как я сделал в моей .bashrc).

Когда я запускаю их двойным щелчком по ним, ни работайте. Но, когда я запускаю их с терминала, работает только второй.

Спасибо за ответ, надеюсь, что это поможет ...

EDIT: Я подтверждаю, что переменная устанавливается в .bashrc загружаются только в терминалах: Я тестировал этот скрипт ->

#!/bin/bash 

echo $LD_LIBRARY_PATH > Run.log 

LD_LIBRARY_PATH=${HOME}/lib 

echo $LD_LIBRARY_PATH >> Run.log 

./Pong

и, когда я запускаю его из терминала, Run.log содержит следующее:

/home/yohan/lib /home/yohan/lib,

, но, когда я запускаю его из двойного щелчка, он содержит только

*newline* /home/yohan/lib

+3

Не думаю, что многие люди будут получать свой код файл за файлом, я, конечно, не будет ; если бы это был, по крайней мере, архив, я мог бы изучить его. Попробуйте записать сообщение в какой-то журнал по абсолютному пути, возможно, он начнется, но вы просто не видите его. Если нет, вы должны добавить дополнительную информацию, такую ​​как, по крайней мере, какую ОС вы используете. Если все остальное терпит неудачу, всегда есть strace (или procmon как альтернатива windows). – keltar

+0

Благодарим вас за советы. Я пробовал писать в файле, но опять же, он работает только тогда, когда он запускается из терминала:/ –

+0

Есть так много вещей, которые можно испортить, чтобы произвести эту ситуацию, поэтому я могу только догадываться. Если вы говорите, что добавили ссылку на новую библиотеку, то наиболее логичным ответом является то, что эта библиотека недоступна в данной среде. Запустите 'ldd./Your_program' и посмотрите, где расположены разрешенные библиотеки. Если ваши библиотеки размещены, например, (вместо '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'и ''), то вы обычно не можете использовать это напрямую и должны написать сценарий оболочки, который устанавливает' LD_LIBRARY_PATH = $ PWD', а затем запускает вашу программу или использует rpath. – keltar

ответ

1

Добавить экспорт до вашей переменной настройки.- Keltar

Хорошо, так большое спасибо, он работает сейчас, с помощью этого сценария:

#!/bin/bash 

export LD_LIBRARY_PATH=${HOME}/lib 

./myprog