Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cmake链接错误-对错误的未定义引用-在标头中声明的结构,在源中不可见_C_Cmake_Linker - Fatal编程技术网

cmake链接错误-对错误的未定义引用-在标头中声明的结构,在源中不可见

cmake链接错误-对错误的未定义引用-在标头中声明的结构,在源中不可见,c,cmake,linker,C,Cmake,Linker,我有一个使用cmake作为构建系统的项目,我有一个链接问题 我有一个名为lwm2mclient.h的haeader文件,其中包含以下结构和指针声明 typedef struct { char binary_filename[256]; }programming; extern programming device1; extern programming device2; extern programming *programmingPtr1; extern programming *

我有一个使用cmake作为构建系统的项目,我有一个链接问题

我有一个名为
lwm2mclient.h
的haeader文件,其中包含以下结构和指针声明

typedef struct
{
    char binary_filename[256];
}programming;

extern programming device1;
extern programming device2;
extern programming *programmingPtr1;
extern programming *programmingPtr2;
我有一个源文件,其中包括
lwm2mclient.h
,它将指针分配给实例

programming *programmingPtr1 = &device1;
programming *programmingPtr2 = &device2;
但我在建造时出错了

dut_object.c.o:(.data+0x0):未定义对设备1的引用`

我推测这与不正确的链接有关,但我不理解cmakelists.txt文件中的错误

这是cmakelists.txt文件,两个文件都设置为源文件

如果有人能看一下,我会很感激的

cmake_minimum_required (VERSION 3.0)

project (lwm2mclient)

option(DTLS "Enable DTLS" OFF)

# Compiler include
#INC1 = ~/Documents/wakaama-master-2_0/examples/IniParser/iniparser-master/src

SET(CRADLE_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../cradle-util/libcradle)

include(${CMAKE_CURRENT_LIST_DIR}/../../core/wakaama.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../shared/shared.cmake)

add_definitions(-DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -DLWM2M_SUPPORT_JSON)
add_definitions(${SHARED_DEFINITIONS} ${WAKAAMA_DEFINITIONS})

include_directories (${WAKAAMA_SOURCES_DIR} ${SHARED_INCLUDE_DIRS} ${CRADLE_INCLUDE_DIR} )

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall -O0")

message("CMAKE_CXX_FLAGS_DEBUG is ${CMAKE_CXX_FLAGS_DEBUG}")

SET(SOURCES
    lwm2mclient.c
    lwm2mclient.h
    system_api.c
    object_security.c
    object_server.c
    object_device.c
    object_firmware.c
    object_location.c
    object_connectivity_moni.c
    object_connectivity_stat.c
    object_access_control.c
    test_object.c
    dut_object.c
    usb_control.c
    )

find_package(PkgConfig REQUIRED)
pkg_check_modules(GLIB_PKG glib-2.0)
message(Found glib-2.0)
include_directories(${GLIB_PKG_INCLUDE_DIRS})


add_executable(${PROJECT_NAME} ${SOURCES} ${WAKAAMA_SOURCES} ${SHARED_SOURCES})

target_link_libraries(${PROJECT_NAME} cradle.a mraa.so m pthread iniparser.a )

LINK_DIRECTORIES(/usr/local/lib /usr/lib/x86_64-linux-gnu ${CMAKE_CURRENT_LIST_DIR}/../../../cradle-util/libcradle )


# Add WITH_LOGS to debug variant
set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:WITH_LOGS>)
cmake_最低要求(3.0版)
项目(lwm2mclient)
选项(DTLS“启用DTLS”关闭)
#编译器包括
#INC1=~/Documents/wakaama-master-2\u 0/examples/IniParser/IniParser-master/src
集合(摇篮\包括\目录${CMAKE\当前\列表\目录}/./../../../../bradle util/libbradle)
包括(${CMAKE\u CURRENT\u LIST\u DIR}/./../core/wakaama.CMAKE)
包括(${CMAKE\u CURRENT\u LIST\u DIR}/./shared/shared.CMAKE)
添加定义(-DLWM2M_客户端模式-DLWM2M_引导-DLWM2M_支持\u JSON)
添加定义(${SHARED_definitions}${WAKAAMA_definitions})
include_目录(${WAKAAMA_SOURCES_DIR}${SHARED_include_DIRS}${bradle_include_DIR})
设置(CMAKE_CXX_FLAGS_DEBUG“${CMAKE_CXX_FLAGS_DEBUG}-Wall-O0”)
消息(“CMAKE_CXX_FLAGS_DEBUG为${CMAKE_CXX_FLAGS_DEBUG}”)
设置(源)
lwm2mclient.c
lwm2mclient.h
系统api.c
对象_security.c
object_server.c
object_device.c
object_firmware.c
object_location.c
对象\u连接\u moni.c
对象\u连接\u统计c
对象访问控制
test_object.c
dut_object.c
usb_控件.c
)
查找_包(需要PkgConfig)
包装检查模块(GLIB包装GLIB-2.0)
消息(发现glib-2.0)
include_目录(${GLIB_PKG_include_DIRS})
添加_可执行文件(${PROJECT_NAME}${SOURCES}${WAKAAMA_SOURCES}${SHARED_SOURCES})
target_link_库(${PROJECT_NAME}bradle.a mraa.so m pthread iniparser.a)
链接目录(/usr/local/lib/usr/lib/x86\u 64-linux-gnu${CMAKE\u CURRENT\u LIST\u DIR}/../../../../../bradle util/libbradle)
#将WITH_日志添加到调试变量
set_属性(目标${PROJECT_NAME}APPEND属性COMPILE_DEFINITIONS$)

您在哪个文件中声明设备1
?您没有使用它进行链接吗?链接器只是在您的任何对象文件中都没有找到设备1。您在哪个文件中声明了设备1?您没有使用它进行链接吗?链接器只是在您的任何对象文件中都没有找到设备1可能是的副本