Страница 1 из 1

Сборка из исходников под macOS

Добавлено: 04 июн 2020, 10:51
CeBepyc
Добрый день. Попытался скомпилировать на Mac OS X 10.15 Catalina: Выдал ошибку компиляции:

Код: Выделить всё

/Library/Developer/CommandLineTools/usr/bin/clang++ -stdlib=libc++ -headerpad_max_install_names  -arch x86_64 -Wl,-syslibroot,/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -mmacosx-version-min=10.12 -Wl,-rpath,@executable_path/../Frameworks -Wl,-rpath,/Users/alex/Qt/5.13.2/clang_64/lib -single_module -dynamiclib -compatibility_version	1.0 -current_version	1.0.0 -install_name	libfilesystem.1.dylib -o libfilesystem.1.0.0.dylib filesystem.o  -F/Users/alex/Qt/5.13.2/clang_64/lib -losg -losgDB -framework QtGui -framework QtCore -framework DiskArbitration -framework IOKit -framework OpenGL -framework AGL    
ld: library not found for -losg
Движок OSG собрал, но он постоянно ругался на "deprecated" вызовы из OpenGL.
Подскажите: в какую сторону копать?

Re: Сборка из исходников под macOS

Добавлено: 04 июн 2020, 12:31
maisvendoo
CeBepyc писал(а):
04 июн 2020, 10:51
Движок OSG собрал, но он постоянно ругался на "deprecated" вызовы из OpenGL.
Подскажите: в какую сторону копать?
Ругался варнингами, я надеюсь? Если варнинги, то пофиг, там действительно поддержка GL версии < 3.0
Если пишет что не может найти -losg, то вероятно действительно не может. В макоси либы как и в линухе в /usr/lib живут? Потому как если она у вас где-то в другом месте, это надо явно указывать компоновщику ключиком -L

Код: Выделить всё

LIBS += -Lпуть_к_каталогу_с_библиотекой -losg 
между ключом и путем не должно быть пробела. В варианте сборки под винду в pro-файле так и делается.

По макоси я не сильно спец, но насколько помню там все приложения поставляются в систему в виде stand alone пакетов, содержащих все зависимости и в системные каталоги ничего не копируется

Upd: Вот, кстати, по командлайну компилятора, увидел, что Qt лежит отдельно от системных библиотек

Короче говоря, резюмируя вышеописанное, копать при таких ошибках компоновщика, копать всегда следует в сторону того, как на конкретной платформе устроен поиск библиотек. В линухе все либы лежат /usr/lib и этот путь является путем по умолчанию, туда же пакетный менеджер устанавливает и OSG. Поэтому там достаточно сказать LIBS += -losg и всё будет найдено.

В винде с этим полный бардак, нужно либо прописывать путь к либам в PATH, либо указывать конкретное расположение, на чем я остановился. Ну а для деплоя пошел по пути stnad alone сборки, сложив всё необходимое окружение в bin/

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

Re: Сборка из исходников под macOS

Добавлено: 04 июн 2020, 17:57
CeBepyc
maisvendoo писал(а):Ругался варнингами, я надеюсь?
Да, варнингами - поэтому без труда собрался.
Все не системные либы в MacOS лежат в /usr/local/lib как заведено во многих linux дистрибутивах и как-бы правильнее по всяким стандартам. И какбы в PATH это прописано, но QT-creator их упорно не видит пока не пропишешь в файле проекта искомые строки.
Эта проблема, собственно, решилась прописыванием хвостов. Теперь назрела другая проблема: asound не компилится: сначала не находил AL/al.h и AL/alc.h - не беда, собрал OpenAL, которые компилятор всё равно не увидел, пока не было прописано в asound.h

Код: Выделить всё

#include <OpenAL/al.h>
#include <OpenAL/alc.h>
Тут компилятор всё увидел и выдает:

Код: Выделить всё

asound.o:-1: error: Undefined symbols for architecture x86_64:
  "ASound::staticMetaObject", referenced from:
      ASound::ASound(QString, QObject*) in asound.o
  "ASound::lastErrorChanged_(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      ASound::ASound(QString, QObject*) in asound.o
      ASound::setLastError(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in asound.o
  "ASound::notify(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
      ASound::ASound(QString, QObject*) in asound.o
      ASound::readWaveInfo_() in asound.o
  "vtable for ASoundController", referenced from:
      ASoundController::ASoundController(QObject*) in asound.o
      ASoundController::~ASoundController() in asound.o
      ASoundController::~ASoundController() in asound.o
      ASoundController::~ASoundController() in asound.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "vtable for ASound", referenced from:
      ASound::ASound(QString, QObject*) in asound.o
      ASound::~ASound() in asound.o
  NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
  "_alBufferData", referenced from:
      ASound::generateStuff_() in asound.o
  "_alDeleteBuffers", referenced from:
      ASound::~ASound() in asound.o
  "_alDeleteSources", referenced from:
      ASound::~ASound() in asound.o
  "_alGenBuffers", referenced from:
      ASound::generateStuff_() in asound.o
  "_alGenSources", referenced from:
      ASound::generateStuff_() in asound.o
  "_alGetError", referenced from:
      ASound::generateStuff_() in asound.o
      ASound::configureSource_() in asound.o
  "_alGetSourcei", referenced from:
      ASound::play() in asound.o
      ASound::isPlaying() in asound.o
      ASound::isPaused() in asound.o
      ASound::isStopped() in asound.o
      ASound::onTimerStartKiller() in asound.o
  "_alListenerfv", referenced from:
      AListener::AListener() in asound.o
  "_alSourcePause", referenced from:
      ASound::pause() in asound.o
  "_alSourcePlay", referenced from:
      ASound::play() in asound.o
  "_alSourceQueueBuffers", referenced from:
      ASound::configureSource_() in asound.o
  "_alSourceStop", referenced from:
      ASound::stop() in asound.o
      ASoundController::switchRunningSound(int) in asound.o
      ASoundController::end() in asound.o
      ASoundController::forcedStop() in asound.o
  "_alSourcef", referenced from:
      ASound::configureSource_() in asound.o
      ASound::setVolume(int) in asound.o
      ASound::setPitch(float) in asound.o
      ASoundController::setSoundBegin(QString) in asound.o
      ASoundController::setSoundEnd(QString) in asound.o
      ASoundController::switchRunningSound(int) in asound.o
      ASoundController::setPitch(float) in asound.o
      ...
  "_alSourcefv", referenced from:
      ASound::configureSource_() in asound.o
      ASound::setPosition(float, float, float) in asound.o
      ASound::setVelocity(float, float, float) in asound.o
  "_alSourcei", referenced from:
      ASound::configureSource_() in asound.o
      ASound::setLoop(bool) in asound.o
      ASound::stop() in asound.o
      ASound::onTimerStartKiller() in asound.o
      ASoundController::appendSoundRunning(QString) in asound.o
      ASoundController::setSoundsRunning(QStringList) in asound.o
      ASoundController::switchRunningSound(int) in asound.o
      ...
  "_alcCloseDevice", referenced from:
      AListener::closeDevices() in asound.o
  "_alcCreateContext", referenced from:
      AListener::AListener() in asound.o
  "_alcDestroyContext", referenced from:
      AListener::closeDevices() in asound.o
  "_alcMakeContextCurrent", referenced from:
      AListener::AListener() in asound.o
  "_alcOpenDevice", referenced from:
      AListener::AListener() in asound.o
 
И вот тут я подвис - маловероятно, что OpenAL скомпилировался под 32bit, потому-что в Catalina отсутствует поддержка 32bit.
maisvendoo писал(а): По макоси я не сильно спец, но насколько помню там все приложения поставляются в систему в виде stand alone пакетов, содержащих все зависимости и в системные каталоги ничего не копируется
Да, есть такая вещь, но этот пакет есть папка с скомпилированной программой и различными библиотеками и иконками.

Re: Сборка из исходников под macOS

Добавлено: 04 июн 2020, 18:16
maisvendoo
CeBepyc писал(а):
04 июн 2020, 17:57
назрела другая проблема: asound не компилится: сначала не находил AL/al.h и AL/alc.h - не беда, собрал OpenAL, которые компилятор всё равно не увидел, пока не было прописано в asound.h
....
Тут компилятор всё увидел и выдает...
Под винду я собирал OpenAL отсюда. Пришлось, ибо под mingw нет сборок, а те исходники что у них на сайте какие-то кривые.

А разве в портах макоси нет OpenAL? Помню как-то игрался с Lion-ом, что-то ставил из портов, какие-то либы, mc и прочее. Под линухой я использую OpenAL из репозитория.

Код: Выделить всё

#include <OpenAL/al.h>
#include <OpenAL/alc.h>
Все эти правки потом надо будет обрамить #ifdef-ами c дефайнами платформ.
Все не системные либы в MacOS лежат в /usr/local/lib как заведено во многих linux дистрибутивах и как-бы правильнее по всяким стандартам
/usr/lib не стандарт как таковой, в разных дистрибутивах по разному. Просто с переходом к systemd, что на большинстве дистрибутивов уже несколько лет как свершилось, все пришли к этому формату путей. Помню ещё как на арче я переезжал с /lib на /usr/lib, а вот переход с /bin на /usr/bin не застал. Как раз арч поставил между этими изменениями.

Кстати линукс не POSIX-система, а вот macOS - POSIX, что делает её настоящим юниксом

Re: Сборка из исходников под macOS

Добавлено: 04 июн 2020, 18:48
CeBepyc
maisvendoo писал(а):Под винду я собирал OpenAL отсюда. Пришлось, ибо под mingw нет сборок, а те исходники что у них на сайте какие-то кривые.
Аналогично, брал отсюда же.
maisvendoo писал(а):А разве в портах макоси нет OpenAL? Помню как-то игрался с Lion-ом, что-то ставил из портов, какие-то либы, mc и прочее.
Порты - не наш метод.
maisvendoo писал(а):Все эти правки потом надо будет обрамить #ifdef-ами c дефайнами платформ.
Необязательно, я немного подредактировал pro-файл и получил такой-же результат с отсутствием символов необходимой архитектуры. Полагаю, в asound присутствует зависимый 32-битный код.

Re: Сборка из исходников под macOS

Добавлено: 04 июн 2020, 19:12
maisvendoo
CeBepyc писал(а):
04 июн 2020, 18:48
Полагаю, в asound присутствует зависимый 32-битный код.
У asound одна внешняя зависимость - openal, больше никаких нет зависимостей нет.

Тут не в OpenAL дело - компоновщик не видит в asound.o реализации объявленных в ашнике методов класса по какой-то причине. Что если в pro-файле попробовать явно указать архитектуру

Код: Выделить всё

QT_ARCH = x86_64
хотя, не думаю что это поможет

Upd: Собрал под линухой отдельно asound, именно clang-ом под x86_64 - всё собралось со свистом. Странно... Просмотр объектников дает адекватную картину
Изображение
если mc установлен, можно прямо в нем по F3 просмотреть asound.o, интересной, какой ELF он там накомпилил....

Re: Сборка из исходников под macOS

Добавлено: 04 июн 2020, 19:38
PeRLouD
Ахах, лучше я уж свои 2 маршрута буду делать для сима, а то страшные коды у вас тут)

Re: Сборка из исходников под macOS

Добавлено: 04 июн 2020, 19:56
maisvendoo
Кстати вопрос - а CfgReader, CfgEditor, filesystem, libJournal собрались?

Upd: В линухе переключил сборочный тулкит на clang - никаких проблем, собрался, запустился весь симулятор. Продолжаем разгадывать...

Re: Сборка из исходников под macOS

Добавлено: 05 июн 2020, 06:42
CeBepyc
maisvendoo писал(а):Кстати вопрос - а CfgReader, CfgEditor, filesystem, libJournal собрались?
Да, без проблем собрались.
maisvendoo писал(а):если mc установлен, можно прямо в нем по F3 просмотреть asound.o, интересной, какой ELF он там накомпилил....
mc утановлен, но, видимо, он старый показывает только HEX, но дизассамблер пишет x86_64.

Re: Сборка из исходников под macOS

Добавлено: 05 июн 2020, 13:58
maisvendoo
Хех, что же в этом asound-e такого, что он такие глюки под маком дает...