MacOS: кросс-компилятор g ++ не может найти ld из образа dmg

Когда я компилирую исходники только из каталога, это нормально. Но если я сделаю это из образа 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.

0

Решение

Наконец я выясняю причину этой проблемы. Это две ошибки или особенности, одна в 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, и создания относительного пути.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]