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
C++ 项目中的链接错误:cmake_C++_Cmake - Fatal编程技术网

C++ 项目中的链接错误:cmake

C++ 项目中的链接错误:cmake,c++,cmake,C++,Cmake,这是我的项目的目录结构: |-- CMakeLists.txt |-- libdashframework | |-- Buffer | | |-- IMediaObjectBufferObserver.h | | |-- MediaObjectBuffer.cpp | | `-- MediaObjectBuffer.h | |-- Input | | |-- DASHReceiver.cpp | | |-- DASHReceiver.h | |

这是我的项目的目录结构:

|-- CMakeLists.txt
|-- libdashframework
|   |-- Buffer
|   |   |-- IMediaObjectBufferObserver.h
|   |   |-- MediaObjectBuffer.cpp
|   |   `-- MediaObjectBuffer.h
|   |-- Input
|   |   |-- DASHReceiver.cpp
|   |   |-- DASHReceiver.h
|   |   |-- IDASHReceiverObserver.h
|   |   `-- MediaObject.h
|   |-- MPD
|   |   |-- AbstractRepresentationStream.cpp
|   |   |-- AbstractRepresentationStream.h
|   |   |-- AdaptationSetStream.cpp
|   |   |-- AdaptationSetStream.h
|   |   |-- BaseUrlResolver.cpp
|   |   |-- BaseUrlResolver.h
|   |   |-- IRepresentationStream.h
|   |   |-- RepresentationStreamFactory.cpp
|   |   |-- RepresentationStreamFactory.h
|   |   |-- SegmentListStream.cpp
|   |   |-- SegmentListStream.h
|   |   |-- SegmentTemplateStream.cpp
|   |   |-- SegmentTemplateStream.h
|   |   |-- SingleMediaSegmentStream.cpp
|   |   |-- SingleMediaSegmentStream.h
|   |   |-- TimeResolver.cpp
|   |   `-- TimeResolver.h
|   `-- Portable
|       |-- MultiThreading.cpp
|       `-- MultiThreading.h
|-- libdash_test_automoc.cpp
|-- libdash_test.cpp
`-- Makefile
我在项目中有一个链接错误,无法找出如何删除它

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
file(GLOB test_source RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
        libdashframework/MPD/*.cpp
        libdashframework/Buffer/*.cpp
        libdashframework/Input/*.cpp
        libdashframework/Portable/*.cpp 
        libdash_test.cpp )

add_executable(libdash_test ${test_source})
target_link_libraries(libdash_test dash -lpthread)
cmake_minimum_required(VERSION 2.8)
project(libdash_test)


set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_MODULE_PATH})
set(CMAKE_CXX_FLAGS "-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS")  


# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)


#libdash has to be manually installed 
set (DASH_INCLUDE_DIR /usr/include/libdash)
find_package(DASH REQUIRED)
link_directories(${DASH_LIBRARIES})

#set(LIBDASH_LIBRARIES "../build/bin" CACHE PATH "Path to libdash.so")
#set(LIBDASH_INCLUDES "../libdash/include/" CACHE PATH "Path to libdash includes")

file(GLOB test_source RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
        libdashframework/MPD/*.cpp
        libdashframework/Buffer/*.cpp
        libdashframework/Input/*.cpp
        libdashframework/Portable/*.cpp 
        libdash_test.cpp )


add_executable(libdash_test ${test_source})
target_link_libraries(libdash_test DASH -ldash ${DASH_LIBRARIES} -lpthread)
错误:

Linking CXX executable libdash_test
CMakeFiles/libdash_test.dir/libdashframework/Buffer/MediaObjectBuffer.cpp.o: In function `libdash::framework::buffer::MediaObjectBuffer::SetEOS(bool)':
MediaObjectBuffer.cpp:(.text+0x55d): undefined reference to `libdash::framework::input::MediaObject::AbortDownload()'
CMakeFiles/libdash_test.dir/libdashframework/Input/DASHReceiver.cpp.o: In function `libdash::framework::input::DASHReceiver::GetNextSegment()':
DASHReceiver.cpp:(.text+0x48e): undefined reference to `libdash::framework::input::MediaObject::MediaObject(dash::mpd::ISegment*, dash::mpd::IRepresentation*)'
CMakeFiles/libdash_test.dir/libdashframework/Input/DASHReceiver.cpp.o: In function `libdash::framework::input::DASHReceiver::GetSegment(unsigned int)':
DASHReceiver.cpp:(.text+0x57f): undefined reference to `libdash::framework::input::MediaObject::MediaObject(dash::mpd::ISegment*, dash::mpd::IRepresentation*)'
CMakeFiles/libdash_test.dir/libdashframework/Input/DASHReceiver.cpp.o: In function `libdash::framework::input::DASHReceiver::GetInitSegment()':
DASHReceiver.cpp:(.text+0x615): undefined reference to `libdash::framework::input::MediaObject::MediaObject(dash::mpd::ISegment*, dash::mpd::IRepresentation*)'
CMakeFiles/libdash_test.dir/libdashframework/Input/DASHReceiver.cpp.o: In function `libdash::framework::input::DASHReceiver::DownloadInitSegment(dash::mpd::IRepresentation*)':
DASHReceiver.cpp:(.text+0x9b0): undefined reference to `libdash::framework::input::MediaObject::StartDownload()'
CMakeFiles/libdash_test.dir/libdashframework/Input/DASHReceiver.cpp.o: In function `libdash::framework::input::DASHReceiver::DoBuffering(void*)':
DASHReceiver.cpp:(.text+0xa84): undefined reference to `libdash::framework::input::MediaObject::StartDownload()'
DASHReceiver.cpp:(.text+0xab5): undefined reference to `libdash::framework::input::MediaObject::WaitFinished()'
collect2: error: ld returned 1 exit status
make[2]: *** [libdash_test] Error 1
make[1]: *** [CMakeFiles/libdash_test.dir/all] Error 2
make: *** [all] Error 2
如何删除此链接错误? 在阅读了其他类似的问题之后,我尝试并更改了file()函数中文件的顺序。订单类似于一个工作样本项目,所以我认为这不是问题所在

编辑:

尽管我已经将libdash的so文件链接到
/usr/bin
/usr/lib/
目录中。但我也更新了cmake。还是没用

更新的CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)
file(GLOB test_source RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
        libdashframework/MPD/*.cpp
        libdashframework/Buffer/*.cpp
        libdashframework/Input/*.cpp
        libdashframework/Portable/*.cpp 
        libdash_test.cpp )

add_executable(libdash_test ${test_source})
target_link_libraries(libdash_test dash -lpthread)
cmake_minimum_required(VERSION 2.8)
project(libdash_test)


set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_MODULE_PATH})
set(CMAKE_CXX_FLAGS "-D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS")  


# Find includes in corresponding build directories
set(CMAKE_INCLUDE_CURRENT_DIR ON)
# Instruct CMake to run moc automatically when needed.
set(CMAKE_AUTOMOC ON)


#libdash has to be manually installed 
set (DASH_INCLUDE_DIR /usr/include/libdash)
find_package(DASH REQUIRED)
link_directories(${DASH_LIBRARIES})

#set(LIBDASH_LIBRARIES "../build/bin" CACHE PATH "Path to libdash.so")
#set(LIBDASH_INCLUDES "../libdash/include/" CACHE PATH "Path to libdash includes")

file(GLOB test_source RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
        libdashframework/MPD/*.cpp
        libdashframework/Buffer/*.cpp
        libdashframework/Input/*.cpp
        libdashframework/Portable/*.cpp 
        libdash_test.cpp )


add_executable(libdash_test ${test_source})
target_link_libraries(libdash_test DASH -ldash ${DASH_LIBRARIES} -lpthread)
当前CMakeLists.txt(编辑下的文件)中存在错误:


您缺少到so dash库的链接。它与file命令无关。我已经将libdash.so lib粘贴到了/usr/lib/ld和/usr/bin中。如果这是您的意思,您应该使用make VERBOSE=1进行构建,并查看链接器是如何准确调用的。可能会发现一些明显的问题。我不知道为什么
查找包(需要破折号)
不起作用。我的意思是,我确实为它设置了目录。嗯,错误消息几乎说明了一切<代码>查找程序包要求存在查找脚本或配置脚本。CMake找不到
仪表板
,因此中止。这要么意味着你没有脚本,要么你没有告诉CMake在哪里找到它。所以第一件事是:检查Dash是否提供包脚本或查找脚本。如果没有,写一个。然后确保可以从生成脚本中找到该文件。您缺少到so dash库的链接。它与file命令无关。我已经将libdash.so lib粘贴到了/usr/lib/ld和/usr/bin中。如果这是您的意思,您应该使用make VERBOSE=1进行构建,并查看链接器是如何准确调用的。可能会发现一些明显的问题。我不知道为什么
查找包(需要破折号)
不起作用。我的意思是,我确实为它设置了目录。嗯,错误消息几乎说明了一切<代码>查找程序包要求存在查找脚本或配置脚本。CMake找不到
仪表板
,因此中止。这要么意味着你没有脚本,要么你没有告诉CMake在哪里找到它。所以第一件事是:检查Dash是否提供包脚本或查找脚本。如果没有,写一个。然后确保可以从构建脚本中找到该文件。