2014-10-27 3 views
0

Программа использует OpenSceneGraph для генерации .osg-файла.Запуск скомпилированного исполняемого файла в Xcode дает другой результат от непосредственного вызова исполняемого файла в оболочке

int main(int, char**) 
{ 
    osg::ref_ptr<osg::Node> root = createSceneGraph(); 
    if (!root.valid()) 
    { 
     osg::notify(osg::FATAL) << "Failed in createSceneGraph()." << endl; 
    } 
    bool result = osgDB::writeNodeFile(*(root.get()), "Simple.osg"); 
    if (!result) 
    { 
     osg::notify(osg::FATAL) << "Failed in osgDB::writeNode()." << endl; 
    } 
} 

Код отрывок из OpenSceneGraph Краткого руководстваhttp://www.lulu.com/items/volume_51/767000/767629/3/print/OSGQSG.pdf страницы 40

Программа может быть скомпилирована и запущена в XCode. Но он показывает следующее сообщение об ошибке:

Error writing file Simple.osg: Warning: Could not find plugin to 
write nodes to file "Simple.osg". 
Failed in osgDB::writeNode(). 



Однако, скомпилированный двоичный код может быть выполнен без ошибок по непосредственно работает в оболочке (./ программа) И программу. правильно генерирует файл Simple.osg.


Это еще не конец истории. Скорее всего, потому, что xcode вызывает программу компиляции иначе, чем вызвать ее в оболочке. Итак, я копирую и вставляю две зависимые библиотеки в каталог, в котором находится скомпилированный двоичный файл.
(В случае, если кто знает OSG, две библиотеки osgdb_deprecated_osg.so и osgdb_osg.so)

На этот раз, Xcode правильно запускает программу без ошибок, генерирующий файл Simple.osg.
Таким образом, есть два вопроса.
1) Почему оболочка может автоматически находить зависимые библиотеки, тогда как Xcode не может?
2) Как заставить Xcode работать без ручного копирования зависимых библиотек или через параметры копирования после компиляции?

ответ

0

OK. Через несколько часов я, наконец, понял.
Причина, по которой библиотеки загружаются под оболочку из-за настроек среды окружения по умолчанию в ~/.profile, так что программа может искать библиотеки с этими переменными.
Как указал XenonofArcticus, xcode не наследует параметры переменной окружения в файле ~/.profile, поэтому программа, работающая под xcode, не может разрешить фактический путь библиотек.
Однако сначала я скопировал эти переменные в настройках переменных окружения в xcode, но это не сработало.
Оказалось, что настройки переменных окружения в xcode не могут быть расширены для разных. е.г:

HELLO=123/hi 
WORLD=$HELLO/enter 

Вторые переменный МИР не заменяет вводный определенно выше в путь.
Поэтому мне нужно вручную писать так:

HELLO=123/hi 
WORLD=123/hi/enter 
0

Это просто вопрос о том, что оболочка PATH отличается от оболочки и Xcode.

Много раз, когда среда IDE позволит вам указать, какая PATH используется во время выполнения. Убедитесь, что он содержит все важные записи, которые имеет обычная оболочка.

+0

Вы можете уточнить, как настроить PATH в Xcode? Я попробовал изменить схему-> arguments-> переменную окружения и установить PATH и другие переменные окружения точно так же, как я установил для оболочки, но все равно не кубик. – user2127480

Смежные вопросы