项目地址:https://github.com/mpromonet/v4l2rtspserver

通过apt-get install 安装 liblivemedia-dev、liblog4cpp5-dev、libasound2-dev等库。

有些依赖的库编译机上找不到,也要下载源码交叉编译后再依赖:

# libssl
target_link_libraries(${PROJECT_NAME}  ${PROJECT_SOURCE_DIR}/libs3rd/libssl.a)

# libalsa
target_link_libraries(${PROJECT_NAME}  ${PROJECT_SOURCE_DIR}/libs3rd/libasound.a)
add_definitions(-DHAVE_ALSA)
# 依赖libasound.a时必须依赖下面的库,否则报错https://code84.com/289048.html
target_link_libraries(${PROJECT_NAME} ${CMAKE_DL_LIBS} )

# liblog4cpp
target_link_libraries(${PROJECT_NAME}  ${PROJECT_SOURCE_DIR}/libs3rd/liborocos-log4cpp.a)
add_definitions(-DHAVE_LOG4CPP)

排雷

  • CMakeLists里设置交叉编译变量无效

就算在CMakeLists里设置交叉编译变量也要在project定义之后设置,否则无效。

通过命令行设置交叉编译变量
https://www.thinbug.com/q/17355798

cmake clean -DCMAKE_C_COMPILER=`which aarch64-linux-gnu-gcc-8`  -DCMAKE_CXX_COMPILER=`which aarch64-linux-gnu-g++-8` ..
  • /usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /usr/lib/x86_64-linux-gnu/libssl.so: error adding symbols: file in wrong format
/etc/opt/pkg/clion-2022.1.3/bin/cmake/linux/bin/cmake --build /home/xinyi/code/cplus/mgylived/cmake-build-arm_linux_gnu --target v4l2rtspserver -j 6
[1/1] Linking CXX executable v4l2rtspserver
FAILED: v4l2rtspserver 
: && /usr/bin/aarch64-linux-gnu-g++ -O3 -DNDEBUG -rdynamic CMakeFiles/v4l2rtspserver.dir/main.cpp.o -o v4l2rtspserver  -Wl,-rpath,/usr/lib/x86_64-linux-gnu:  liblibv4l2rtspserver.a  -Wl,-Bdynamic  /usr/lib/x86_64-linux-gnu/libssl.so  -Wl,-Bstatic  ../alsa-lib-1.2.3.2/build/lib/libasound.a  -ldl  v4l2wrapper/libv4l2wrapper.a  -pthread  -Wl,-Bdynamic  /usr/lib/x86_64-linux-gnu/libcrypto.so  -Wl,-Bstatic && :
/usr/lib/gcc-cross/aarch64-linux-gnu/9/../../../../aarch64-linux-gnu/bin/ld: /usr/lib/x86_64-linux-gnu/libssl.so: error adding symbols: file in wrong format
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

没有明白为什么aarch的交叉编译器会去x86里搜索库?明明路径都指定了

但是如果把源码里CMakeLists.txt里第65行的find_package(OpenSSL QUIET)注释掉,就不会报这个错误了。


0 条评论

发表回复

您的电子邮箱地址不会被公开。