0

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

4

1 回答 1

0

最后我找出了这个问题的原因。它是两个错误或功能,一个在 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++ 就可以了。我认为原因在其他地方。但是我错了。

冒号的反斜杠没有帮助。

在某个时刻,我从 myApp.app 捆绑子目录放置的目录中手动构建了 dmg 图像,并使用以下简短命令:

macdeployqt myApp.app -dmg

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

于 2017-06-05T04:51:49.740 回答