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链接错误(collect2:ld返回1个链接到当前目录的退出状态。)_C++_Cmake - Fatal编程技术网

C++ CMake链接错误(collect2:ld返回1个链接到当前目录的退出状态。)

C++ CMake链接错误(collect2:ld返回1个链接到当前目录的退出状态。),c++,cmake,C++,Cmake,**************编辑-2************** 根据这些评论,我已经通过删除自动设置的变量编辑了我的CMakeLists文件,现在它工作了,我能够编译、构建和执行所有三个项目(从根目录和单个目录)。我已经在这篇文章中更新了CMakeLists文件,以防其他人发现它有用。谢谢你的帮助 **************原始问题************** 我的问题与回答的问题相似,但该解决方案对我没有帮助。我在链接Cmake中的项目时遇到问题。我的目录结构如下: ├── CMakeLi

**************编辑-2**************

根据这些评论,我已经通过删除自动设置的变量编辑了我的CMakeLists文件,现在它工作了,我能够编译、构建和执行所有三个项目(从根目录和单个目录)。我已经在这篇文章中更新了CMakeLists文件,以防其他人发现它有用。谢谢你的帮助

**************原始问题**************

我的问题与回答的问题相似,但该解决方案对我没有帮助。我在链接Cmake中的项目时遇到问题。我的目录结构如下:

├── CMakeLists.txt
├── build
├── armadillo_example
│   ├── include
│       ├── example.h
│   ├── src
│       ├── example.cpp
│   └── CMakeLists.txt
├── asio_opencv
│   ├── include
│       ├── asio_opencv.h
│   ├── src
│       ├── asio_opencv.cpp
│   └── CMakeLists.txt
├── boost_a-star_cities
│   ├── include
│       ├── astar-cities.h
│       ├── astar_goal_visitor.hpp
│       ├── city_writer.hpp
│       ├── distance_heuristic.hpp
│       ├── time_writer.hpp
│   ├── src
│       ├── astar_cities.cpp
│   └── CMakeLists.txt
/CMakeLists.txt

cmake_minimum_required ( VERSION 2.8 )
project ( yanack )

set ( CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build )

set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

add_subdirectory ( armadillo_example )
add_subdirectory ( boost_a-star_cities )
add_subdirectory ( asio_opencv )
cmake_minimum_required ( VERSION 2.8 )
project ( armadillo_example )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Armadillo REQUIRED )
include_directories ( ${ARMADILLO_INCLUDE_DIRS} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )
add_executable ( example ${PROJ_SRCS} )
target_link_libraries ( example ${ARMADILLO_LIBRARIES} )

# for compiling into shared lib
#add_library ( ${PROJECT_NAME} SHARED ${PROJECT1_SRCS} )
cmake_minimum_required ( VERSION 2.8 )
project ( asio_opencv )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Boost COMPONENTS system REQUIRED )
find_package ( OpenCV REQUIRED )
include_directories ( ${OpenCV_INCLUDE_DIR} ${Boost_INCLUDE_DIR} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )
add_executable ( asio_opencv ${PROJ_SRCS} )
target_link_libraries ( asio_opencv ${OpenCV_LIBS} ${Boost_LIBRARIES} )
cmake_minimum_required ( VERSION 2.8 )
project ( boost_a-star_cities )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Boost COMPONENTS graph REQUIRED )
include_directories ( ${Boost_INCLUDE_DIR} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )

add_executable ( astar-cities ${PROJ_SRCS} )
target_link_libraries ( astar-cities ${Boost_LIBRARIES} )
/armadillo\u示例/CMakeLists.txt

cmake_minimum_required ( VERSION 2.8 )
project ( yanack )

set ( CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build )

set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

add_subdirectory ( armadillo_example )
add_subdirectory ( boost_a-star_cities )
add_subdirectory ( asio_opencv )
cmake_minimum_required ( VERSION 2.8 )
project ( armadillo_example )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Armadillo REQUIRED )
include_directories ( ${ARMADILLO_INCLUDE_DIRS} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )
add_executable ( example ${PROJ_SRCS} )
target_link_libraries ( example ${ARMADILLO_LIBRARIES} )

# for compiling into shared lib
#add_library ( ${PROJECT_NAME} SHARED ${PROJECT1_SRCS} )
cmake_minimum_required ( VERSION 2.8 )
project ( asio_opencv )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Boost COMPONENTS system REQUIRED )
find_package ( OpenCV REQUIRED )
include_directories ( ${OpenCV_INCLUDE_DIR} ${Boost_INCLUDE_DIR} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )
add_executable ( asio_opencv ${PROJ_SRCS} )
target_link_libraries ( asio_opencv ${OpenCV_LIBS} ${Boost_LIBRARIES} )
cmake_minimum_required ( VERSION 2.8 )
project ( boost_a-star_cities )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Boost COMPONENTS graph REQUIRED )
include_directories ( ${Boost_INCLUDE_DIR} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )

add_executable ( astar-cities ${PROJ_SRCS} )
target_link_libraries ( astar-cities ${Boost_LIBRARIES} )
/asio\u opencv/CMakeLists.txt

cmake_minimum_required ( VERSION 2.8 )
project ( yanack )

set ( CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build )

set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

add_subdirectory ( armadillo_example )
add_subdirectory ( boost_a-star_cities )
add_subdirectory ( asio_opencv )
cmake_minimum_required ( VERSION 2.8 )
project ( armadillo_example )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Armadillo REQUIRED )
include_directories ( ${ARMADILLO_INCLUDE_DIRS} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )
add_executable ( example ${PROJ_SRCS} )
target_link_libraries ( example ${ARMADILLO_LIBRARIES} )

# for compiling into shared lib
#add_library ( ${PROJECT_NAME} SHARED ${PROJECT1_SRCS} )
cmake_minimum_required ( VERSION 2.8 )
project ( asio_opencv )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Boost COMPONENTS system REQUIRED )
find_package ( OpenCV REQUIRED )
include_directories ( ${OpenCV_INCLUDE_DIR} ${Boost_INCLUDE_DIR} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )
add_executable ( asio_opencv ${PROJ_SRCS} )
target_link_libraries ( asio_opencv ${OpenCV_LIBS} ${Boost_LIBRARIES} )
cmake_minimum_required ( VERSION 2.8 )
project ( boost_a-star_cities )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Boost COMPONENTS graph REQUIRED )
include_directories ( ${Boost_INCLUDE_DIR} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )

add_executable ( astar-cities ${PROJ_SRCS} )
target_link_libraries ( astar-cities ${Boost_LIBRARIES} )
/boost\u a-star\u cities/CMakeLists.txt

cmake_minimum_required ( VERSION 2.8 )
project ( yanack )

set ( CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build )

set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

add_subdirectory ( armadillo_example )
add_subdirectory ( boost_a-star_cities )
add_subdirectory ( asio_opencv )
cmake_minimum_required ( VERSION 2.8 )
project ( armadillo_example )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Armadillo REQUIRED )
include_directories ( ${ARMADILLO_INCLUDE_DIRS} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )
add_executable ( example ${PROJ_SRCS} )
target_link_libraries ( example ${ARMADILLO_LIBRARIES} )

# for compiling into shared lib
#add_library ( ${PROJECT_NAME} SHARED ${PROJECT1_SRCS} )
cmake_minimum_required ( VERSION 2.8 )
project ( asio_opencv )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Boost COMPONENTS system REQUIRED )
find_package ( OpenCV REQUIRED )
include_directories ( ${OpenCV_INCLUDE_DIR} ${Boost_INCLUDE_DIR} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )
add_executable ( asio_opencv ${PROJ_SRCS} )
target_link_libraries ( asio_opencv ${OpenCV_LIBS} ${Boost_LIBRARIES} )
cmake_minimum_required ( VERSION 2.8 )
project ( boost_a-star_cities )

set ( CMAKE_CXX_FLAGS "-std=c++11" )
set ( PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include )

find_package ( Boost COMPONENTS graph REQUIRED )
include_directories ( ${Boost_INCLUDE_DIR} )

file ( GLOB_RECURSE PROJ_SRCS src/*.cpp )

include_directories ( "${PROJECT_INCLUDE_DIR}" )

add_executable ( astar-cities ${PROJ_SRCS} )
target_link_libraries ( astar-cities ${Boost_LIBRARIES} )
每个项目都有自己的主要功能(它们最终将转换为链接到一个包含main的文件的库),我可以在各自的构建目录中分别构建每个项目。我按照教程设置了这个CMake结构。当我建立它时,我只有armadillo_示例和boost_a-star_cities,我能够构建这两个示例,并在根构建目录中获取它们的可执行文件。今天,我添加了asio_opencv(同样可以在自己的构建目录中构建和执行),但我得到了以下错误:

mkdir build
cd build
cmake ..
make
Scanning dependencies of target example
[ 33%] Building CXX object armadillo_example/CMakeFiles/example.dir/src/example.cpp.o
Linking CXX executable ../example
[ 33%] Built target example
Scanning dependencies of target astar-cities
[ 66%] Building CXX object boost_a-star_cities/CMakeFiles/astar-cities.dir/src/astar-cities.cpp.o
Linking CXX executable ../astar-cities
[ 66%] Built target astar-cities
Scanning dependencies of target asio_opencv
[100%] Building CXX object asio_opencv/CMakeFiles/asio_opencv.dir/src/asio_opencv.cpp.o
Linking CXX executable .
/usr/bin/ld: cannot open output file .: Is a directory
collect2: error: ld returned 1 exit status
make[2]: *** [asio_opencv] Error 1
make[1]: *** [asio_opencv/CMakeFiles/asio_opencv.dir/all] Error 2
make: *** [all] Error 2

ls
armadillo_example  asio_opencv  astar-cities  boost_a-star_cities  CMakeCache.txt  CMakeFiles  cmake_install.cmake  example  Makefile
正如您所看到的,它构建了前两个项目,并拥有它们的可执行文件,但对于asio_opencv项目,它构建了它,但似乎将它与当前目录(.)相链接。我不确定到底出了什么问题,尤其是前两个项目的建设和运行没有任何问题

**************编辑-1**************

下面是运行make VERBOSE=1后的输出。第一个是从根构建目录(失败的目录)运行它。第二个是从asio_opencv构建目录(成功的目录)运行它

根生成目录(失败):

asio_opencv构建目录(成功):


为什么要使用
文件(GLOB_RECURSE
对于单个文件?你能执行
make VERBOSE=1
吗?奇怪的是,这个可执行文件被称为
修改自动变量
CMAKE_BINARY_DIR
项目\u SOURCE_DIR
不是一个好主意。
但是对于asio_opencv项目来说……但似乎将它与当前目录相链接
-正如@usr1234567所指出的,cmake使用
作为可执行文件本身的名称。它看起来像是有人为它设置了
OUTPUT\u name
属性。@usr1234567:我使用glob\u recurse,因为随着项目的增长,最终我会有多个cpp文件。这样我就不需要手动添加文件名了。@Tsyvarev:我遵循了e链接的教程,不确定设置自动变量的正确步骤。我愿意接受建议。如果堆栈溢出,不鼓励回答问题帖子中的问题。最好创建回答帖子,并在那里描述您如何解决问题。此外,将问题帖子还原为问题表单。I回答自己的问题是完全可以的。你们也可以接受你们的答案,所以问题将被标记为以通常的方式回答。