C++ MacOS:g++;交叉编译器无法从dmg映像中找到ld

C++ MacOS:g++;交叉编译器无法从dmg映像中找到ld,c++,macos,gcc,macdeployqt,C++,Macos,Gcc,Macdeployqt,当我只从一个目录编译源代码时,它就可以了。但如果我从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 -

当我只从一个目录编译源代码时,它就可以了。但如果我从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工作


My*.dmg包含一个应用程序和一个交叉编译器。用于编译的源文件位于此应用程序外部并由其创建。这是一个简单的IDE。

最后我找到了这个问题的原因。它有两个bug或特性,一个在macdeployqt中,另一个在g++中

当我编写构建脚本时,我认为在运行脚本的同一目录中获取dmg映像会很好。我添加了一个带有绝对路径的命令:

macdeployqt /Users/me/develop/macos_build_script/myApp/myApp_Release/myApp/myApp.app -dmg
图像已经建立,我的应用程序运行良好。但是macdeployqt从绝对路径为dmg装载点命名。绝对路径变成了一个带有冒号的目录名,而不是斜杠: :用户:我:开发:macos\u构建\u脚本:myApp:myApp\u发布:myApp。dmg的根目录不包含此目录,它仅在装载dmg映像时出现

然后这个带有冒号的目录将成为makefile变量的一部分

交叉编译器i586-poky-linux-g++在存在冒号的路径时构建一个对象文件。我认为,如果g++对对象文件使用这个冒号路径,它就可以了。我想原因在别的地方。但我错了

冒号的反斜杠没用

过了一会儿,我从一个目录手工构建了dmg图像,myApp.app bundle子目录使用以下短命令放置在该目录中:

macdeployqt myApp.app -dmg
问题已经解决了。dmg映像现在的装载点仅为/Volumes/myApp。除了跳转到myApp.app所在的目录并创建相对路径外,我什么也不做