ioscmake編譯
㈠ 還有QtCreator可不可以用來開發安卓應用的
IDE真正的用武之地,是在某種特定的生態環境下,開發邊界清晰的項目。比如在windows上用VS開發MFC應悉改仿用,比如用QtCreator開發qt應用,比如用AndroidStudio開發安卓app,比如用Xcode開發ios應用。基本上運行平台、IDE、語言等等都是一整套。
這種類型的項目,我認為,再大都不算大。
真正的大項目,是涉及了多種語言,多個運行平台,層次縱深很大的項目。比如說在一棵代碼樹裡面有c語言編寫的硬體固件,有c++編寫的視頻處理,有python編寫的dnn目標檢測,有Java寫的人機交互,有bash腳本,還依賴一些第三方庫。有的底層軟體用makefile管理,有的用cmake管理,有的用maven管理殲隱。他們相互之間還有版本依賴。這時候做些調試的時候,免不了要在不同的語言不同的編譯腳本之間跳來跳去。過程中可能還需要把一些東西推到伺服器上,再登上去做一些配置。還有可能要登睜纖陸到嵌入式設備上。有的時候還要打開一個串口終端。
這么復雜的事情,沒有任何一個IDE做得好。因為項目一旦復雜到這種程度,就沒有任何通用性可言。每個具體的項目都是完全不同的。不可能設計一套ide來處理好所有的項目。
而這種情況對於只有一個簡單的前端(文本編輯器或者LISP解析器),後端配上大量的插件,組合而成的個人定製化工具集,是可以勝任的。
㈡ 如何編譯OpenCV進行IOS7
編譯的Xcode項目失敗,出現以下錯誤: 「缺少必需的架構arm64在文件/用戶/ * / Git/ocr/opencv2。 它運作良好,如果我改變架構(構建設置下)(ARMv7的,armv7s),而不是(ARMv7的,armv7s)。 如何更改opencv的python構建腳本,添加arm64支持opencv2。
1. micahp的回答幾乎是完美的,但錯過了模擬器版本。因此,修改平台/ IOS /到: targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]
你需要下載行工具Xcode的5.0.1,然後運行 python opencv/platforms/ios/build_framework.py ios
2. 我修改了以下內容,使之建立,雖然我還沒有得到一個arm64 iOS設備進行測試的 編輯:我也只好跟著 假設「OPENCV」是包含從Github上的opencv源文件夾: 在每個gzlib.c, gzread.c, gzwrite.c位於opencv/3rdparty/zlib/地址: #include <unistd.h>
在頂部後,原有的包括。 另外開opencv/platforms/ios/cmake/Moles/Platform/iOS.cmake並從改線88: set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string "Build architecture for iOS")
到: set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_INCLUDING_64_BIT)" CACHE string "Build architecture for iOS")
在另外改變buildscriptopencv/platforms/ios/build_framework.py在99線和100從: targets = ["iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "i386"]
到: targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]
所得到的庫將包括以下內容: $ xcrun -sdk iphoneos lipo -info opencv2
Architectures in the fat file: opencv2 are: armv7 armv7s i386 x86_64 arm64
雖然我有一個關於剩餘的關注opencv/platforms/ios/cmake/Toolchain-iPhoneOS_Xcode.cmake它定義了一個數據指針的大小為4的行14和17。它應該是8的64位我想,這樣我沒有測試過,如果庫工作arm64我會建議進一步研究在這一點上,如果它不能正常運行。
3. 嘗試等待下個月。將發布新的XCode具有更強大的32/64位支持。
4. 修改「到: def build_framework(srcroot, dstroot):
"main function to do all the work"
targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386"]
for i in range(len(targets)):
build_opencv(srcroot, os.path.join(dstroot, "build"), targets[i], archs[i])
put_framework_together(srcroot, dstroot)
㈢ ipad可以安裝opencv嗎
iOS 工程使用 OpenCV:
、安裝OpenCV for MAC
1)首先載opencv for mac安裝源文件解壓縮
2)安裝cmake程序筆者使用Homebrew終端輸入:brew install cmake自安裝cmake
3) 進入存放解壓opencv文件夾新建空文件夾release進入該文件夾編譯安裝opencv使用命令:
mkdir release
cd release
cmake -G "Unix Makefiles" ..
make
sudo make install
4)安裝lib文件存放/usr/local/lib文件夾h文件存放/usr/local/include至opencv for Mac 安裝完畢
二、XCode使用OpenCV
1. 創建空command line工程
2. main.cpp粘貼代碼:
#include
#include opencv.hpp>
#include highgui/highgui.hpp>
#include cvaux.hpp>
#include
using namespace std;
#define BYTE unsigned char
int main(int argc, const char * argv[])
{
#if 1
//get the image from the directed path
IplImage* img = cvLoadImage("/Users/boyuanfeng/aaa.bmp", 1);
//NSLog(img);
//create a window to display the image
cvNamedWindow("picture", 1);
//show the image in the window
cvShowImage("picture", img);
//wait for the user to hit a key
cvWaitKey(0);
//delete the image and window
cvReleaseImage(&img);
cvDestroyWindow("picture");
#endif
//return
return 0;
}
3. 添加lib文件:右鍵點擊工程名選擇Add files to..文件選擇框彈輸入/彈路徑框輸入:/usr/local/lib全選該文件夾全部dylib文件添加至工程
4. 添加lib文件查找支持: 點擊工程名文件進入Build Settings選項卡Library Search Paths欄輸入/usr/local/lib
5. 添加文件:點擊工程名文件進入Build Settings選項卡Header Search Paths欄輸入:/usr/local/include /usr/local/include/opencv
6. 編譯運行整工程運行功
㈣ 如何用開源飛控PIXHAWK進行開發
想快速開發一個飛控,那首先要做的是了解apm的各種參數配置,了解每個參數的影響和起作用的代碼功能塊,用apm適配自己的機型還是需要修改,優化,和裁剪。正如克里斯安德森說希望APM做無人機行業的安卓,但是安卓的性能也只能是差強人意,比無人機行業的IOS大疆創新來說還差很多。
飛控行業或者研究領域應用,例如開發測繪手機app,無人機送快遞等等(傾向於demo性質)...這種應用不需要做一個飛控,首先大概了解飛控的原理,然後只要掌握apm的控制數據協議即可。
發燒級的愛好者或者開發者,迫切的想要了解apm的大部分演算法和邏輯,這個真的需要較長的時間,大致的思路就是:底層驅動-》感測器數據和物理意義-》姿態解算-》PID控制器-》飛行模式切換-》參數調優(包含gps懸停剎車什麼的很細但是影響手感和性能的參數)初學只是去看apm而不是自己動手去做很難搞懂,建議還是自己做飛控,哪怕復制apm部分功能代碼,做飛控的學習順序和讀飛控一樣,但對於apm這樣一個系統工程相對來說模塊更分立。
㈤ 如何在arm linux平台連接ios設備
環境配置
export PREFIX=/opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usrexport HOST=arm-none-linux-gnueabiexport BUILD=x86_64-unknown-linux-gnuexport LD_LIBRARY_PATH=$PREFIX/libexport PKG_CONFIG_PATH=$LD_LIBRARY_PATH/pkgconfig
libusb
Package: libusb-1.0.8.tar.bz2
a. 先聲明上面的環境
b. ./configure --build=$BUILD --host=$HOST --prefix=$PREFIX --disable-static --disable-logc. maked.make install
libplist
Package: libplist-1.3.tar.bz2
這個需要用cmake編譯,自己寫一個toolchain.cmake 修改交叉編譯變數
# this one is important
SET(CMAKE_SYSTEM_NAME Linux)#this one not so muchSET(CMAKE_SYSTEM_VERSION 1)
# specify the cross compiler
SET(CMAKE_C_COMPILER /opt/arm-2009q1/bin/arm-none-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER /opt/arm-2009q1/bin/arm-none-linux-gnueabi-g++)
# where is the target environment
SET(CMAKE_FIND_ROOT_PATH /opt/dvrrdk/DVRRDK_04.00.00.03/ti_tools/cgt_a8/arago/linux-devkit/arm-arago-linux-gnueabi/usr)
# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
然後在源碼目錄下 新建build文件夾
mkdir build
cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..
make DESTDIR=$PREFIX install
usbmuxd
Package: usbmuxd-1.0.4.tar.bz2
編譯方法和libplist是一樣的。現在通道已經打通。
㈥ 有誰知道ipad上怎麼編譯c嗎
本iOSC/iOSC++適用於iPhone 5S、iPad 4。
經測試,本軟體可以編譯 復雜命令行程序、運用了各種Framework的IPA程序、cmake、SDL2庫、運用了SDL2的程序、同時運用SDL2和UIKit的程序、純演算法程序。
1、請先安裝必須軟體包,從這個匯總貼子里下載:http://bbs.weiphone.com/read-htm-tid-5259660.html
如果您覺得不放心,這些軟體包可以在code.google.com各自的項目里下載
(註:安裝方法:)
(先在Cydia中安裝Debian Packager)
(然後在終端模擬器或SSH中進入DEB文件夾以root許可權運行dpkg -i *)
2、然後請用Mac OS安裝Xcode,提取/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/到您的iPhone5s或者iPad4上。
3、在Cydia中安裝class mp和classmp-dyld,這個工具可以在你需要Private Framework的頭文件時,為你反編譯出可用的頭文件。(Private Framework本身是不提供頭文件的)
4、最後把您需要的可執行文件復制到/usr/bin目錄並設置可執行許可權。
在iosc文件夾和iosc++文件夾中,各個版本目錄下文件說明:
main.cpp ——此版本源代碼
a.out,iosc,iosc++ ——此版本二進制可執行文件
config.txt ——此版本最佳配置文件。
註:配置文件一般自動生成。如果
希望iosc/iosc++盡量不提問,可以
把這個config.txt復制
到/var/mobile/.ioscpp/config.txt
5、iosc、iosc++在V1.3之後有一次渺小而重要的更新,運用此更新,用戶第一次有把握在iPhone5S、iPad4設備上從復雜源代碼搭建實用工具,例如cmake、SDL2。此更新保證開發者在iOS 7上可以編譯任何C/C++代碼。因此,自V1.3以後的代碼暫不開源。
6、利用theos可以從源代碼編譯iOS IPA程序。貌似不支持Storyboard。
!注意!如果需要安裝產生的IPA,需要AppSync補丁,因為沒簽名……
(編譯方法:)
(從原帖子下載整個壓縮包,僅提取其中的theos文件夾)
(從本目錄安裝好iosc/iosc++)
(把本目錄中的ipa.nic.zip等nic.zip文件拷貝到theos/templates/iphone/)
(利用Nic建立項目,進入項目文件夾用make編譯)
㈦ clang 編譯不過去這個是什麼原因
1,Buildllvm/clang/lldb/lld3.5.0等組件1.0准備:至少需要從llvm.org下載llvm,cfe,lldb,compiler-rt,lld等3.5.0版本的代碼。$tarxfllvm-3.5.0.src.tar.gz$cdllvm-3.5.0.src$mkdir-ptools/clang$mkdir-ptools/clang/tools/extra$mkdir-ptools/lld$mkdir-pprojects/compiler-rt$tarxfcfe-3.5.0.src.tar.xz-Ctools/clang--strip-components=1$tarxfcompiler-rt-3.5.0.src.tar.xz-Cprojects/compiler-rt--strip-components=1$tarxflldb-3.5.0.src.tar.xz-Ctools/clang/tools/extra--strip-components=1$tarxflld-3.5.0.src.tar.xz-Ctools/lld--strip-components=11.1【可選】使用clang--stdlib=libc++時,自動添加-lc++abi。libc++組件可以使用gcclibstdc++的supc++ABI,也可以使用c++abi,cxxrt等,實際上自動添加-lc++abi是不必要的,這里這么處理,主要是為了方便起見。實際上完全可以在「clang++-stdlib=libc++」時再手工添加-lc++abi給鏈接器。這里涉及到鏈接時DSO隱式還是顯式的問題,早些時候ld在鏈接庫時會自動引入由庫引入的依賴動態庫,後來因為這個行為的不可控性,所以ld鏈接器的行為做了修改,需要顯式的寫明所有需要鏈接的動態庫,才會有手工添加-lc++abi這種情況出現。---llvm-3.0.src/tools/clang/lib/Driver/ToolChain.cpp2012-03-2618:49:06.663029075+0800+++llvm-3.0.srcn/tools/clang/lib/Driver/ToolChain.cpp2012-03-2619:36:04.260071355+0800@@-251,6+251,7@@switch(Type){caseToolChain::CST_Libcxx:CmdArgs.push_back("-lc++");+CmdArgs.push_back("-lc++abi");break;caseToolChain::CST_Libstdcxx:1.2【必要】給clang++添加-fnolibgcc開關。這個開關主要用來控制是否連接到libgcc或者libunwind。註:libgcc不等於libunwind。libgcc_eh以及supc++的一部分跟libunwind功能相當。註:libgcc_s和compiler_rt的一部分相當。這個補丁是必要的,不會對clang的正常使用造成任何影響,只有在使用「-fnolibgcc"參數時才會起作用。之所以進行了很多unwind的引入,主要是為了避免不必要的符號缺失麻煩,這里的處理相對來說是干凈的,通過as-needed規避了不必要的引入。---llvm-static-3.5.0.bak/tools/clang/lib/Driver/Tools.cpp2014-09-1013:46:02.581543888+0800+++llvm-static-3.5.0/tools/clang/lib/Driver/Tools.cpp2014-09-1016:03:37.559019321+0800@@-2060,9+2060,15@@".a");CmdArgs.push_back(Args.MakeArgString(LibClangRT));-CmdArgs.push_back("-lgcc_s");-if(TC.getDriver().CCCIsCXX())-CmdArgs.push_back("-lgcc_eh");+if(Args.hasArg(options::OPT_fnolibgcc)){+CmdArgs.push_back("--as-needed");+CmdArgs.push_back("-lunwind");+CmdArgs.push_back("--no-as-needed");+}else{+CmdArgs.push_back("-lgcc_s");+if(TC.getDriver().CCCIsCXX())+CmdArgs.push_back("-lgcc_eh");+}}staticvoidaddProfileRT(@@-7150,24+7156,50@@boolisAndroid=Triple.getEnvironment()==llvm::Triple::Android;boolStaticLibgcc=Args.hasArg(options::OPT_static_libgcc)||Args.hasArg(options::OPT_static);+++if(!D.CCCIsCXX())-CmdArgs.push_back("-lgcc");+if(Args.hasArg(options::OPT_fnolibgcc)){+CmdArgs.push_back("--as-needed");+CmdArgs.push_back("-lunwind");+CmdArgs.push_back("--no-as-needed");+}else+CmdArgs.push_back("-lgcc");if(StaticLibgcc||isAndroid){if(D.CCCIsCXX())-CmdArgs.push_back("-lgcc");+if(Args.hasArg(options::OPT_fnolibgcc)){+CmdArgs.push_back("--as-needed");+CmdArgs.push_back("-lunwind");+CmdArgs.push_back("--no-as-needed");+}else+CmdArgs.push_back("-lgcc");}else{if(!D.CCCIsCXX())CmdArgs.push_back("--as-needed");-CmdArgs.push_back("-lgcc_s");+if(Args.hasArg(options::OPT_fnolibgcc))+CmdArgs.push_back("-lunwind");+else+CmdArgs.push_back("-lgcc_s");if(!D.CCCIsCXX())CmdArgs.push_back("--no-as-needed");}if(StaticLibgcc&&!isAndroid)-CmdArgs.push_back("-lgcc_eh");+if(Args.hasArg(options::OPT_fnolibgcc)){+CmdArgs.push_back("--as-needed");+CmdArgs.push_back("-lunwind");+CmdArgs.push_back("--no-as-needed");+}else+CmdArgs.push_back("-lgcc_eh");elseif(!Args.hasArg(options::OPT_shared)&&D.CCCIsCXX())-CmdArgs.push_back("-lgcc");+if(Args.hasArg(options::OPT_fnolibgcc)){+CmdArgs.push_back("--as-needed");+CmdArgs.push_back("-lunwind");+CmdArgs.push_back("--no-as-needed");+}else+CmdArgs.push_back("-lgcc");//AccordingtoAndroidABI,wehavetolinkwithlibdlifweare//linkingwithnon-staticlibgcc.---llvm-static-3.5.0.bak/tools/clang/include/clang/Driver/Options.td2014-08-0712:51:51.000000000+0800+++llvm-static-3.5.0/tools/clang/include/clang/Driver/Options.td2014-09-1013:36:34.598511176+0800@@-788,6+788,7@@deffomit_frame_pointer:Flag,Group;deffopenmp:Flag,Group,Flags;deffopenmp_EQ:Joined,Group,Flags;+deffnolibgcc:Flag,Group,Flags;deffno_optimize_sibling_calls:Flag,Group;deffoptimize_sibling_calls:Flag,Group;defforce__cpusubtype__ALL:Flag;1.3llvm的其他補丁。llvm/clang將gcctoolchain的路徑hardcode在代碼中,請查閱tools/clang/lib/Driver/ToolChains.cpp。找到x86_64-redhat-linux之類的字元串。如果沒有你系統特有的gcctripplestring,請自行添加。這個tripplestring主要是給llvm/clang搜索gcc頭文件等使用的,不影響本文要構建的toolchain1.4構建clang/llvm/lldb本文使用ninja。順便說一下,llvm支持configure和cmake兩種構建方式。可能是因為工程太大,這兩種構建方式的工程文件都有各種缺陷(主要表現在開關選項上,比如configure有,但是cmake卻沒有等)。llvm-3.4.1就是因為cmake工程文件的錯誤而導致了3.4.2版本的發布。綜合而言,cmake+ninja的方式是目前最快的構建方式之一,可以將構建時間縮短一半以上。mkdirbuildcdbuildcmake\-GNinja\-DCMAKE_INSTALL_PREFIX=/usr\-DCMAKE_BUILD_TYPE="Release"\-DCMAKE_CXX_FLAGS="-std=c++11"\-DBUILD_SHARED_LIBS=OFF\-DLLVM_ENABLE_PIC=ON\-DLLVM_TARGETS_TO_BUILD="all"\-DCLANG_VENDOR="MyOS"..ninjaninjainstall如果系統原來就有clang/clang++的可用版本,可以添加:-DCMAKE_C_COMPILER=clang\-DCMAKE_CXX_COMPILER=clang++\這樣就會使用系統的clang++來構建llvm/clang2,測試clang/clang++。自己找幾個簡單的c/cpp/objc等編譯測試一下即可。完整測試可以在構建時作ninjacheck-all3,libunwind/libc++/libc++abi,一套不依賴libgcc,libstdc++的c++運行庫。3.1從/pathscale/libunwind獲取代碼。libunwind有很多個實現,比如gnu的libunwind,path64的libunwind,還有libcxxabi自帶的Unwinder.這里作下說明:1),gnu的libunwind會有符號缺失和沖突。2),libcxxabi自帶的Unwinder是給mac和ios用的,也就是只能在darwin體系構建。目前Linux的實現仍然不全,等linux實現完整了或許就不再需要path64的unwind實現了。暫時建議使用pathscale的unwind實現。mkdir-pbuildcdbuildcmake-GNinja-DCMAKE_C_COMPILER=clang-DCMAKE_C_FLAGS="-m64"..ninjamkdir-p/usr/libcpsrc/libunwind.so/usr/libcpsrc/libunwind.a/usr/lib3.2第一次構建libcxx.必須先構建一次libcxx,以便後面構建libcxxabi。這里構建的libcxx實際上是使用gcc的libgcc/stdc++/supc++的。打上這個補丁來禁止libgcc的引入:diff-Nurlibcxx/cmake/config-ix.cmakelibcxxn/cmake/config-ix.cmake---libcxx/cmake/config-ix.cmake2014-06-2506:57:50.000000000+0800+++libcxxn/cmake/config-ix.cmake2014-06-2509:05:24.980350544+0800@@-28,5+28,4@@check_library_exists(cprintf""LIBCXX_HAS_C_LIB)check_library_exists(mccos""LIBCXX_HAS_M_LIB)check_library_exists(rtclock_gettime""LIBCXX_HAS_RT_LIB)-check_library_exists(gcc_s__gcc_personality_v0""LIBCXX_HAS_GCC_S_LIB)編譯安裝:mkdirbuildcdbuildcmake\-GNinja\-DCMAKE_INSTALL_PREFIX=/usr\-DCMAKE_C_COMPILER=clang\-DCMAKE_CXX_COMPILER=clang++\..ninjaninjainstall3.3,測試第一次構建的libcxx。使用"clang++-stdlib=libc++-otesttest.cpp-lstdc++"編譯簡單c++代碼,檢查是否出錯。(如果前面構建clang是已經apply了c++abi的鏈接補丁,這里會出現找不到c++abi的情況,跳過即可)使用"lddtest"查看test二進制動態庫使用情況。可以發現,test依賴於libgcc_s/libc++/libstdc++。(多少有些不爽了吧?使用了libc++居然還要依賴libstdc++?)