【问题标题】:MacOS: g++ cross-compiler cannot find ld from dmg imageMacOS:g++ 交叉编译器无法从 dmg 图像中找到 ld
【发布时间】:2017-11-01 00:16: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 中起作用?

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

【问题讨论】:

    标签: c++ macos gcc macdeployqt


    【解决方案1】:

    最后我找出了这个问题的原因。它是两个错误或功能,一个在 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 捆绑子目录使用这个短命令放置:

    macdeployqt myApp.app -dmg
    

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

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 2021-10-22
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      相关资源
      最近更新 更多