使用 CMake 的静态方法链接错误
Linking error with static method using CMake
我正在C++中构建一个需要调用外部库的项目。 特别是,我需要访问在外部类的静态方法中创建的单例。 但是,当我尝试使用 CMake 制作它时,我收到一个链接器错误:undefined reference to `AVT::VmbAPI::VimbaSystem::GetInstance()'
我确定路径是正确的,因为如果我不调用GetInstance()
,代码可以毫无问题地编译和运行。
代码本身非常简单,所以我认为这一定是我的 CMake 配置的问题。 相关文件如下:
CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.10 FATAL_ERROR)
PROJECT(Thing LANGUAGES CXX)
#set(CMAKE_VERBOSE_MAKEFILE ON)
SET(CMAKE_CXX_STANDARD 17)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}
-Wall -Wextra -Wno-deprecated -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op
-Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual -Wpedantic
-ffast-math
-fPIC
")
ENABLE_TESTING()
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(lib)
ADD_SUBDIRECTORY(test)
src/CMakeLists.txt
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR} source)
ADD_EXECUTABLE(thing ${source})
TARGET_LINK_LIBRARIES(thing LINK_PUBLIC Camera)
lib/CMakeLists.txt
ADD_LIBRARY(Camera ${CMAKE_CURRENT_SOURCE_DIR}/camera.cpp)
TARGET_INCLUDE_DIRECTORIES(Camera
PUBLIC
../include
${CMAKE_CURRENT_SOURCE_DIR}}
/opt/Vimba_2_0
/opt/Vimba_2_0/VimbaCPP/Include
)
src/main.cpp
#include <camera.h>
int main() {
Camera c = Camera();
return 0;
}
lib/camera.cpp
#include "../include/camera.h"
Camera::Camera() {
AVT::VmbAPI::VimbaSystem &sys = AVT::VmbAPI::VimbaSystem::GetInstance();
}
include/camera.h
#ifndef CAMERA_H
#define CAMERA_H
#include "VimbaCPP.h"
#include "VimbaSystem.h"
class Camera {
public:
Camera();
~Camera() = default;
};
#endif //CAMERA_H
显然,我需要链接一个动态库,但在 Vimba 文档中没有提到。 对于将来遇到此问题的任何人,我通过在lib/CMakeLists.txt
中添加以下行来解决它。
TARGET_LINK_LIBRARIES(Camera /opt/Vimba_2_0/VimbaCPP/DynamicLib/x86_64bit/libVimbaCPP.so)
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- Visual Studio mkl_link_tool.exe链接错误
- C++ 实现模板单例类时出现链接错误
- 使用类模板的方法链接错误
- MySQL C++连接器链接错误
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 运行 C++ 单元测试时LNK2005链接错误
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 链接错误,包括我创建的相同头文件 - C++
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 使用标头保护的多个定义链接错误
- 链接错误:未定义对 stdscr 和 wgetch 的引用
- 使用 Vivek 的 Vcam / 捕获源过滤器构建/链接错误
- 升压program_options中的链接错误
- 使用 g++ 预处理器进行替换会导致链接错误
- 在调试配置中编译工作正常,但发布会给出链接错误
- 相邻矩阵设置链接错误
- 包含常量变量并包含在多个文件中的标头的链接错误
- C++链接错误,我理解但无法解决
- 是什么导致macOS Mojave上的GoogleTest链接错误