首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yocto找不到包装头(include_next stind.h没有这样的文件)

Yocto找不到包装头(include_next stind.h没有这样的文件)
EN

Stack Overflow用户
提问于 2022-06-14 18:23:05
回答 1查看 214关注 0票数 0

我正在尝试创建一个bitbake食谱,以构建驻留在本地文件夹中的一些源代码(而不是从远程回购中获取)。

在运行bitbake之后,我希望在结果映像中有一个可执行文件和一个共享库。

源代码包括三个CMakeLists。

到目前为止,我能够:

  • 运行cmake本身,在我的主机和目标上构建源代码(即不使用bitbake)
  • 使用我的.bb文件,使用变量OECMAKE_SOURCEPATH正确地指向源代码。
  • 使用默认的do_compile()开始运行cmake

构建在do_compile()期间失败,错误如下:

代码语言:javascript
复制
In file included from /home/myname/UDS_Server_Integration/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Inc/typedefs.h:29,
|                  from /home/myname/UDS_Server_Integration/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Src/DOIP/DOIP.h:32,
|                  from /home/myname/UDS_Server_Integration/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Src/ISOUDS/ISOUDS_MAIN/ISOUDS_Server_Cfg.h:30,
|                  from /home/myname/UDS_Server_Integration/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Src/ISOUDS/ISOUDS_ClearDiagInfo/ISOUDS_ClearDiagInfo_Cfg.c:25:
| /home/myname/project/nxp_s32/build_s32g274asbc2/tmp/work/aarch64-ms-linux/embitel-uds/1.0.0-r0/recipe-sysroot-native/usr/lib/aarch64-ms-linux/gcc/aarch64-ms-linux/10.2.0/include/stdint.h:9:16: fatal error: stdint.h: No such file or directory
|     9 | # include_next <stdint.h>
|       |                ^~~~~~~~~~
| compilation terminated.
| make[2]: *** [CMakeFiles/uds-server.dir/build.make:264: CMakeFiles/uds-server.dir/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Src/ISOUDS/ISOUDS_ClearDiagInfo/ISOUDS_ClearDiagInfo_Cfg.c.o] Error 1
| In file included from /home/myname/UDS_Server_Integration/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Inc/typedefs.h:29,
|                  from /home/myname/UDS_Server_Integration/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Src/DOIP/DOIP.h:32,
|                  from /home/myname/UDS_Server_Integration/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Src/ISOUDS/ISOUDS_MAIN/ISOUDS_Server_Cfg.h:30,
|                  from /home/myname/UDS_Server_Integration/src/3rdparty/udsdoip/UDSSrvonDOIP/DoIPSrvProcess/Src/ISOUDS/ISOUDS_CntrlDTCSetting/ISOUDS_CntrlDTCSetting.c:13:
| /home/myname/project/nxp_s32/build_s32g274asbc2/tmp/work/aarch64-ms-linux/embitel-uds/1.0.0-r0/recipe-sysroot-native/usr/lib/aarch64-ms-linux/gcc/aarch64-ms-linux/10.2.0/include/stdint.h:9:16: fatal error: stdint.h: No such file or directory
|     9 | # include_next <stdint.h>
|       |                ^~~~~~~~~~

然而,stdint.h确实存在。我查了一下"include_next“是什么,它是“包装头”。我认为GCC是用这个来修改目标环境的头,也就是说,这是一个跨编译器的问题。我假设这将表明cmake没有正确配置以进行交叉编译,或者没有查找修改后的标头的正确位置。

我从来没有遇到过这个问题,使用相同的交叉编译器为同一个目标环境构建其他源代码。我的.bb配方也是使用与其他包相同的变量编写的。我甚至比较了CMakeOutput.log和CMakeCache.txt对于这个失败的菜谱和其他成功的菜谱,并且看到大多数相关的变量都是用相同的值设置的。

这使我相信这可能是CMakeLists.txt的一个问题,并且没有为这个特定的源代码正确地配置cmake。

我尝试过在-DCMAKE_NO_SYSTEM_FROM_IMPORTED=1的基础上添加这条线。我还避免了直接设置基于的交叉编译器。

然而,我不知道我可能错过了什么。

我提到的其他问题:引用gcc与yocto食谱制作文件,找不到stdint

以下是我的CMakeLists供参考:

Cmake_minimum_required(3.13版)

代码语言:javascript
复制
project("MyUDS"
    VERSION "1.0.0"
    LANGUAGES C)

include(GNUInstallDirs)

## --- C++ build flags ---
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

set(CMAKE_C_FLAGS "-MMD -MP -O4 -fcommon")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu11")

# Set version
set(PROJECT_VERSION_MAJOR 0 CACHE STRING "")
set(PROJECT_VERSION_MINOR 0 CACHE STRING "")
set(PROJECT_VERSION_PATCH 0 CACHE STRING "")
set(PROJECT_VERSION_BUILD 0 CACHE STRING "")

# changes binary and library outputs to ./build/bin and ./build/lib
# set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)

add_library(uds-server SHARED)

set_target_properties(uds-server PROPERTIES
    VERSION ${PROJECT_VERSION}
    SOVERSION ${PROJECT_VERSION_MAJOR})

add_subdirectory(src/3rdparty/udsdoip)

- CMakeLists在src/3 3rdparty/udsdoip中

代码语言:javascript
复制
file(GLOB_RECURSE sched_sources ${CMAKE_CURRENT_SOURCE_DIR}/UDSSrvonDOIP/DoIPSrvProcess/Sched/*.c)
add_executable(udsserver ${sched_sources})
target_link_libraries(udsserver uds-server pthread)
target_include_directories(
    udsserver
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/UDSSrvonDOIP/DoIPSrvProcess/Inc
            ${CMAKE_CURRENT_SOURCE_DIR}/UDSSrvonDOIP/DoIPSrvProcess/Sched/Inc
            ...
            ${CMAKE_CURRENT_SOURCE_DIR}/UDSSrvonDOIP/DoIPSrvProcess/Src/Inc
)

add_subdirectory(UDSSrvonDOIP/DoIPSrvProcess)

install(TARGETS udsserver DESTINATION bin)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/service/uds_server.sh DESTINATION bin)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/service/uds_server.service
        DESTINATION /etc/systemd/system
)

- CMakeLists在UDSSrvonDOIP/DoIPSrvProcess中

代码语言:javascript
复制
project(lib-uds-server)

# Enable helper debugging messages
target_compile_definitions(
    uds-server PUBLIC DEBUG_SOCKCOMM DOIP_SERVER_PRINT_TCP_RX_PACKET_DATA DOIP_SERVER_PRINT_FOUND_NET_DEVS
)

file(GLOB_RECURSE isouds_sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.c)

target_sources(uds-server PRIVATE ${isouds_sources})

target_include_directories(
    uds-server
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Inc
            ${CMAKE_CURRENT_SOURCE_DIR}/Sched
            ${CMAKE_CURRENT_SOURCE_DIR}/Sched/Inc
            ...
            ${CMAKE_CURRENT_SOURCE_DIR}/Src/ISOUDS/ISOUDSSecurDtaTrans
)

install(TARGETS uds-server
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
EN

Stack Overflow用户

回答已采纳

发布于 2022-06-24 17:14:41

发现了问题,这是个愚蠢的错误。

我没有继承Yocto设置的交叉编译环境所需的CMake C标志。因此,无论我在.bb食谱文件中添加了哪些标志,它们都将在源代码CMakeLists.txt中被覆盖。

在这里,在设置C标志的地方,我没有继承Yocto的标志。

代码语言:javascript
复制
set(CMAKE_C_FLAGS "-MMD -MP -O4 -fcommon")

我应该使用现有的标志并附加到源代码中的标记,如下所示:

代码语言:javascript
复制
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MMD -MP -O4 -fcommon")

这让我的身材正常了。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72621749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档