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