【发布时间】:2020-11-02 09:15:22
【问题描述】:
我正在 Visual Studio 上开发一个将部署在 linux 上的 c++ 程序,并通过 ssh 在 linux 上进行调试。目前,这是我的文件夹的结构:
ANT
-xscommon
--xscommon_config.h
-xscontroller
-xstypes
ANT.cpp
ANT.h
CMakeLists.txt
CMakeSettings.json
hashes.h
quaternionic.h
stars.h
目前,我认为我必须链接到的所有.h, .cpp, .o, .cpp.o, .a 文件都保存在三个 xs------- 目录中。我对 cmake 很陌生,链接到这些库给我带来了麻烦;我能够正确链接到包含,但是当我不进行链接时会抛出未定义的引用错误,当我尝试链接时,它会抛出错误。这是我当前的 CMakeLists.txt 文件:
# CMakeList.txt : CMake project for ANT, include source and define
# project specific logic h"ere.
#
cmake_minimum_required (VERSION 3.8)
project ("ANT")
link_directories(${ANT_SOURCE_DIR}/xscommon xscontroller xstypes)
add_executable(
ANT
"ANT.cpp"
"ANT.h"
"quaternionic.h"
"stars.h"
"hashes.h"
)
target_include_directories(ANT PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(ANT PUBLIC xscommon_config)
当我运行它时,构建器会说以下内容:
/usr/bin/ld: cannot find -lxscommon_config
我需要在 ANT.cpp 所在的目录中查找这些库,因为这是保存它们的位置,但是我所做的任何事情(我已经搞砸了几个小时的配置)都不会告诉 camke 去寻找这些库在 src 文件夹中。它总是转到/usr/bin/ld。
我真的只需要知道告诉 CMake 什么,这样它就会在每个文件的正确位置查找,也就是说,如果我告诉它查找正确的文件(我很确定我是)。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
更新
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
所以我将 CMakeLists.txt 文件重新制作为:
# CMakeList.txt : CMake project for ANT, include source and define
# project specific logic here.
#
cmake_minimum_required (VERSION 3.15)
project ("ANT")
#[STATIC | SHARED | MODULE]
#[STATIC | SHARED | MODULE]
#[STATIC | SHARED | MODULE]
add_library(xscommon SHARED IMPORTED)
add_library(xscontroller SHARED IMPORTED)
add_library(xstypes SHARED IMPORTED)
add_executable(
ANT
"ANT.cpp"
"ANT.h"
)
target_include_directories(ANT PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
并且仍然得到未定义的引用。我将尝试构建库。此外,我已经联系了使用此 SDK 的 IMU 制造商,因为同事也无法解决此问题。
【问题讨论】:
-
欢迎来到 Stack Overflow!如果您尝试将预构建的外部库链接到您的
ANT可执行文件,请参阅 this 问题及其响应以了解完成此操作的正确方法。
标签: c++ visual-studio cmake linker libraries