Когда я компилирую исходники только из каталога, это нормально. Но если я сделаю это из образа DMG, я получу это:
$ make
"/Volumes/:Users:me:develop:macos_build_script:myApp:myApp_Release:myApp/myApp.app/Contents/MacOS/devkit-x86/sysroots/i386-pokysdk-darwin/usr/bin/i586-poky-linux/i586-poky-linux-g++" -std=c++11 -Wall -O2 --sysroot="/Volumes/:Users:me:develop:macos_build_script:myApp:myApp_Release:myApp/myApp.app/Contents/MacOS/devkit-x86/sysroots/core2-32-poky-linux" -c -MD main.cpp -I/Volumes/:Users:me:develop:macos_build_script:myApp:myApp_Release:myApp/myApp.app/Contents/MacOS/devkit-x86/sysroots/core2-32-poky-linux/usr/include/c++/4.9.1 -I/Volumes/:Users:me:develop:macos_build_script:myApp:myApp_Release:myApp/myApp.app/Contents/MacOS/devkit-x86/sysroots/core2-32-poky-linux/usr/include/c++/4.9.1/i586-poky-linux -o main.o
"/Volumes/:Users:me:develop:macos_build_script:myApp:myApp_Release:myApp/myApp.app/Contents/MacOS/devkit-x86/sysroots/i386-pokysdk-darwin/usr/bin/i586-poky-linux/i586-poky-linux-g++" -std=c++11 -Wall -O2 --sysroot="/Volumes/:Users:me:develop:macos_build_script:myApp:myApp_Release:myApp/myApp.app/Contents/MacOS/devkit-x86/sysroots/core2-32-poky-linux" main.o -I/Volumes/:Users:me:develop:macos_build_script:myApp:myApp_Release:myApp/myApp.app/Contents/MacOS/devkit-x86/sysroots/core2-32-poky-linux/usr/include/c++/4.9.1 -I/Volumes/:Users:me:develop:macos_build_script:myApp:myApp_Release:myApp/myApp.app/Contents/MacOS/devkit-x86/sysroots/core2-32-poky-linux/usr/include/c++/4.9.1/i586-poky-linux -lopencv_core -lopencv_highgui -lopencv_imgproc -lzmq -o aaa.bin
collect2: fatal error: cannot find 'ld'
compilation terminated.
make: *** [aaa] Error 1
После этой ошибки я распаковываю содержимое из * .dmg, затем запускаю и компиляция завершается успешно.
Почему и что мне нужно сделать, чтобы это работало с DMG?
Мой * .dmg содержит приложение и кросс-компилятор. Исходные файлы для компиляции находятся снаружи и создаются этим приложением. Это просто IDE.
Наконец я выясняю причину этой проблемы. Это две ошибки или особенности, одна в macdeployqt и одна в g ++.
Когда я писал свой строительный скрипт, я думал, что будет хорошо получить изображение dmg в том же каталоге, из которого я запускаю свой скрипт. И я добавил команду с абсолютным путем:
macdeployqt /Users/me/develop/macos_build_script/myApp/myApp_Release/myApp/myApp.app -dmg
Изображение было построено, и мое приложение работало хорошо. Но. Молча macdeployqt сделал имя точки монтирования dmg из абсолютного пути. Абсолютный путь стал одним именем каталога с двоеточиями вместо косой черты:
Пользователей: меня: разработка: macos_build_script: MYAPP: myApp_Release: MYAPP. Корень dmg не содержит этот каталог, он появляется только при монтировании образа dmg.
Тогда этот каталог с двоеточиями будет частью переменных makefile.
Кросс-компилятор i586-poky-linux-g ++ создает объектные файлы при наличии путей с двоеточиями. И я подумал, что все нормально с g ++, если он использует пути в двоеточии для объектных файлов. Я думал, что причина где-то в другом месте. Но я был неправ.
Обратная косая черта не помогает.
В какой-то момент я вручную собрал образ dmg из каталога, в котором находился подкаталог пакета myApp.app с помощью этой короткой команды:
macdeployqt myApp.app -dmg
И проблема ушла. Точка монтирования образа DMG теперь просто / Volumes / MYAPP. Я ничего не делаю, кроме перехода к директории, где находится myApp.app, и создания относительного пути.
Других решений пока нет …