1.我在ccs ide中编译通过了一个工程,编译通过能上版正常运行。我尝试使用cmake搭建一个工程,但发现链接阶段报错:
<Linking> warning #10211-D: cannot resolve archive C:/ti/ccs1260/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS/lib/libc.a to a compatible library, as no input files have been encountered warning #10062-D: entry-point symbol "_c_int00" undefined undefined first referenced symbol in file --------- ---------------- FS$$DIV CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj ___c28xabi_CLOCKS_PER_SEC CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj __abort_msg CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj __ftable CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj __setjmp CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj _calloc CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj _clock CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj _ctime CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _exit CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\CUError.c.obj _fclose CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _fopen CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _fprintf CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _fputs CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\AutomatedJUnitXml.c.obj _free CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _isspace CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\Util.c.obj _longjmp CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj _malloc CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _memcpy CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\Util.c.obj _printf CMakeFiles\j1939Dcm_utest_sub0.out.dir\test.c.obj _realloc CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\AutomatedJUnitXml.c.obj _setvbuf CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _snprintf CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestRun.c.obj _strcat CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _strcmp CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestDB.c.obj _strcpy CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Framework\TestDB.c.obj _strlen CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _strncpy CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _time CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\Automated.c.obj _toupper CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Console\Console.c.obj _vsnprintf CMakeFiles\j1939Dcm_utest_sub0.out.dir\CUnit\Sources\Automated\AutomatedJUnitXml.c.obj error #10234-D: unresolved symbols remain error #10010: errors encountered during linking; "bin\j1939Dcm_utest_sub0.out" not built
对应的cmake 的CMakeLists.txt
cmake_minimum_required(VERSION 3.13) project(j1939Dcm_utest C) set(CMAKE_C_STANDARD 99) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib") set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin") set(EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/bin") set(EXECUTABLE_SUB0 ${PROJECT_NAME}_sub0.out) set(cunit_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/CUnit) set(cunit_SOURCE_SRCS ${cunit_SOURCE_DIR}/Sources/Automated/Automated.c ${cunit_SOURCE_DIR}/Sources/Automated/AutomatedJUnitXml.c ${cunit_SOURCE_DIR}/Sources/Basic/Basic.c ${cunit_SOURCE_DIR}/Sources/CI/CUnitCI.c ${cunit_SOURCE_DIR}/Sources/Console/Console.c ${cunit_SOURCE_DIR}/Sources/Framework/CUError.c ${cunit_SOURCE_DIR}/Sources/Framework/MessageHandlers.c ${cunit_SOURCE_DIR}/Sources/Framework/MyMem.c ${cunit_SOURCE_DIR}/Sources/Framework/TestDB.c ${cunit_SOURCE_DIR}/Sources/Framework/TestRun.c ${cunit_SOURCE_DIR}/Sources/Framework/Util.c ) add_executable(${EXECUTABLE_SUB0} ) target_include_directories(${EXECUTABLE_SUB0} PUBLIC ${cunit_SOURCE_DIR} ) target_sources(${EXECUTABLE_SUB0} PRIVATE test.c PRIVATE ${cunit_SOURCE_SRCS} )
toolchain 的文本内容:
### BEGIN CMAKE_TOOLCHAIN_FILE # "Generic" is used when cross compiling set(CMAKE_SYSTEM_NAME Generic) set(CCSROOT_DIR "C:/ti/ccs1260/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS") set(HIGHTEC_PROJ_DIR ${CMAKE_CURRENT_LIST_DIR}) set(CMAKE_SYSROOT ${CCSROOT_DIR}) set(C_COMPILER_INCLUDE_PATH "${CCSROOT_DIR}/include") set(CMAKE_SYSTEM_INCLUDE_PATH "${CCSROOT_DIR}/include") set(CPU_FLAGS "-v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 --advice:performance=all -g --printf_support=full --diag_warning=225 --diag_wrap=off --display_error_number --abi=coffabi") set(CMAKE_C_COMPILER "${CCSROOT_DIR}/bin/cl2000.exe" "${CPU_FLAGS} --include_path=${C_COMPILER_INCLUDE_PATH} --preproc_with_compile") set(CMAKE_CXX_COMPILER "${CCSROOT_DIR}/bin/cl2000.exe" "${CPU_FLAGS}") # use response file for ninja SET(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1) SET(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1) SET(CMAKE_C_RESPONSE_FILE_LINK_FLAG "@") SET(CMAKE_CXX_RESPONSE_FILE_LINK_FLAG "@") SET(CMAKE_NINJA_FORCE_RESPONSE_FILE 1) # Set up the CMake variables for the linker set(LINKER_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/2837x_FLASH_lnk_cpu1.cmd") set(LINKINFO_FILE "CCS_linkInfo.xml") set(CMAKE_EXE_LINKER_FLAGS "-z -m${PROJECT_NAME}.map --heap_size=0x400 --stack_size=0x200 --warn_sections -i\"${CCSROOT_DIR}/lib\" -i\"${CCSROOT_DIR}/include\" --reread_libs --diag_wrap=off --display_error_number --xml_link_info=${LINKINFO_FILE} --rom_model ${LINKER_SCRIPT} -llibc.a") set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)