2017-05-31 38 views
0

當我從一個目錄編譯源代碼時就沒問題。但是,如果我從DMG鏡像做到這一點,我得到這個:MacOS:g ++交叉編譯器無法從dmg映像中找到ld

$ 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 ++中的兩個bug或特性。

當我編寫我的構建腳本時,我認爲將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 ++在存在冒號的路徑時構建目標文件。我認爲,如果它使用這個colographic路徑作爲目標文件,那麼它就可以使用g ++。我以爲在其他地方的原因是什麼。但是我錯了。

冒號的反斜槓不起作用。

在某些時刻,我用手建造的DMG圖像從目錄中myApp.app束子目錄放在這個簡短的命令:

macdeployqt myApp.app -dmg 

,問題就消失了。 dmg映像的掛載點現在只是/卷/ myApp。除了跳轉到myApp.app所在的目錄並創建相對路徑外,我什麼都不做。