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

MacOS: g++ cross-compiler cannot find ld from dmg image

当我只从一个目录编译源代码时,没问题。但是如果我从 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 挂载点命名。绝对路径变成了用冒号代替斜杠的单个目录名: :Users:me:develop:macos_build_script:myApp:myApp_Release:myApp。 dmg的根目录下没有这个目录,只有挂载dmg镜像时才会出现

那么这个带冒号的目录将成为makefile变量的一部分。

交叉编译器 i586-poky-linux-g++ 在存在带冒号的路径时构建目标文件。而且我认为如果 g++ 将此带冒号的路径用于目标文件,则一切正常。我认为原因在其他地方。但是我错了

冒号的反斜杠没有帮助。

在某些时候,我从一个目录中手动构建了 dmg 映像,其中 myApp.app bundle 子目录放置了这个简短的命令:

macdeployqt myApp.app -dmg

问题就解决了。现在dmg镜像的挂载点就是/Volumes/myApp。除了跳转到 myApp.app 所在的目录并创建相对路径外,我什么都不做。