我正在嘗試創建一個嵌入軸相機的應用程序,它具有MIPS處理器。我正在用我的項目使用opencv。現在,在運行create-package.sh mipsisa32r2el之後,我收到了錯誤,它跳過了不兼容的庫並且找不到庫。我想我應該爲MIPS處理器交叉編譯opencv,但我不知道我該怎麼做。我已經檢查過opencv文檔,但是我沒有找到針對MIPS處理器的交叉編譯。爲mips處理器交叉編譯opencv
1
A
回答
1
從您的意見,它看起來像你的編譯腳本已經在使用GCC交叉編譯爲MIPS(mipsisa32r2el-axis-linux-gnu-gcc
看起來像是來自安訊士攝像機工具鏈),如果你沒有這樣的GCC(也許腳本指的是它,但你沒有它),你需要建立一個類似Buildroot或Crosstool-NG的mips32el工具鏈,它不是太難(並且缺少的庫可能已經可以在工具鏈構建腳本中選擇)。
您主要是這裏有兩個問題,涉及到的事實,你不具備所有必需的依賴/庫:
有些庫是不兼容:工具鏈的GCC找不到所需的庫和它試圖使用一個存在於主機操作系統
有些庫是完全缺少:工具鏈的GCC找不到該庫的任何地方
爲了解決這些問題,每次編譯腳本沒有找到庫時,編譯它,然後將生成的.so放在LD_LIBRARY_PATH
的其中一個目錄中。爲每個缺失/不兼容的庫執行此操作。 這將是一個漫長的過程。
+1
非常感謝,它絕對幫助 –
1
我發現了一個更簡單的方法,通過改變臂gnueabi.toolchain.cmak使用MIPS編譯 這裏編譯MIPS處理器OpenCV的代碼被更改的cmake的:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR mips)
set(GCC_COMPILER_VERSION "4.6" CACHE STRING "GCC Compiler version")
set(FLOAT_ABI_SUFFIX "")
if (NOT SOFTFP)
set(FLOAT_ABI_SUFFIX "hf")
endif()
#find_program(CMAKE_C_COMPILER NAMES mipsisa32r2el-axis-linux- gnu${FLOAT_ABI_SUFFIX}-gcc${GCC_COMPILER_VERSION})
#find_program(CMAKE_CXX_COMPILER NAMES mipsisa32r2el-axis-linux- gnu${FLOAT_ABI_SUFFIX}-g++${GCC_COMPILER_VERSION})
set(CMAKE_C_COMPILER /usr/local/mipsisa32r2el/r12/bin/mipsisa32r2el-axis- linux-gnu-gcc)
set(CMAKE_CXX_COMPILER /usr/local/mipsisa32r2el/r12/bin/mipsisa32r2el-axis-linux-gnu-g++)
set(CMAKE_CXX_FLAGS "" CACHE STRING "c++ flags")
set(CMAKE_C_FLAGS "" CACHE STRING "c flags")
set(CMAKE_SHARED_LINKER_FLAGS "" CACHE STRING "shared linker flags")
set(CMAKE_MODULE_LINKER_FLAGS "" CACHE STRING "module linker flags")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,nocopyreloc" CACHE STRING "executable linker flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdata-sections -Wa,--noexecstack - fsigned-char ")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fdata-sections -Wa,--noexecstack -fsigned-char ")
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_SHARED_LINKER_FLAGS}")
set(CMAKE_MODULE_LINKER_FLAGS "-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_MODULE_LINKER_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now ${CMAKE_EXE_LINKER_FLAGS}")
if(USE_NEON)
message(WARNING "You use obsolete variable USE_NEON to enable NEON instruction set. Use -DENABLE_NEON=ON instead.")
set(ENABLE_NEON TRUE)
elseif(USE_VFPV3)
message(WARNING "You use obsolete variable USE_VFPV3 to enable VFPV3 instruction set. Use -DENABLE_VFPV3=ON instead.")
set(ENABLE_VFPV3 TRUE)
endif()
set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${MIPS_LINUX_SYSROOT})
if(EXISTS ${CUDA_TOOLKIT_ROOT_DIR})
set(CMAKE_FIND_ROOT_PATH ${CMAKE_FIND_ROOT_PATH} ${CUDA_TOOLKIT_ROOT_DIR})
endif()
set(CMAKE_SKIP_RPATH TRUE CACHE BOOL "If set, runtime paths are not added when using shared libraries.")
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
# macro to find programs on the host OS
macro(find_host_program)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
if(CMAKE_HOST_WIN32)
SET(WIN32 1)
SET(UNIX)
elseif(CMAKE_HOST_APPLE)
SET(APPLE 1)
SET(UNIX)
endif()
find_program(${ARGN})
SET(WIN32)
SET(APPLE)
SET(UNIX 1)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endmacro()
# macro to find packages on the host OS
macro(find_host_package)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
if(CMAKE_HOST_WIN32)
SET(WIN32 1)
SET(UNIX)
elseif(CMAKE_HOST_APPLE)
SET(APPLE 1)
SET(UNIX)
endif()
find_package(${ARGN})
SET(WIN32)
SET(APPLE)
SET(UNIX 1)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
endmacro()
通過這個全光照的cmake我做靜態庫opencv
相關問題
- 1. 針對MIPS處理器交叉編譯Perl或期望
- 2. 針對MIPS處理器的交叉編譯
- 3. 將node.js交叉編譯爲MIPS 24Kc V5.0
- 4. 針對ARM 9處理器的opencv交叉編譯
- 5. 交叉編譯opencv for arm
- 6. 交叉編譯Samba 4.0.5 i686到MIPS
- 7. 針對MIPS架構的交叉編譯
- 8. 特拉維斯MIPS交叉編譯
- 9. 設置交叉編譯器爲MIPS-I版本1
- 10. 從x86開始爲MIPS路由器進行交叉編譯
- 11. 交叉編譯器
- 12. 如何用ffmpeg交叉編譯OpenCV
- 13. 交叉編譯OpenCV找不到libv4l1
- 14. OpenCV for ARM交叉編譯失敗
- 15. 使用CMake與MinGW交叉編譯OpenCV
- 16. 在ubuntu上交叉編譯openCV for ARM
- 17. 安裝mips交叉編譯器的問題
- 18. 爲MIPS平臺交叉編譯libSDL時出現的問題
- 19. 交叉編譯sh腳本以bin爲enigma2(mips)OpenEmbedded
- 20. 編譯警告 - ARM交叉編譯器
- 21. 交叉編譯FFTW:協處理器偏移超出範圍
- 22. 交叉編譯器d-bus
- 23. cuda nvcc交叉編譯器
- 24. 哪個交叉編譯器?
- 25. 爲arm編譯交叉編譯e2fsprogs
- 26. 交叉編譯openvswitch爲Android
- 27. 交叉編譯freetype爲Android
- 28. 如何爲微處理器SA1100安裝交叉編譯器(在ubuntu 12.04 LTS上)?
- 29. 使用CMake爲Pandaboard交叉編譯OpenCV Ubuntu
- 30. Qt交叉編譯
你使用mips工具鏈(gcc等)來編譯它嗎?另外,缺少的庫需要存在。 –
在create-package.sh中,它使用mipsisa32r2el-axis-linux-gnu-gcc編譯項目。它錯過了opencv的所有庫。 –
噢好吧,我想你正在建造一個Axis相機,這將是一個懶惰的過程:) –