提问人:Somebody6153 提问时间:5/16/2021 最后编辑:Somebody6153 更新时间:5/16/2021 访问量:472
在 Windows 上使用 LLVM 时,CMake 无法正确链接静态库
CMake not linking static libraries properly when using LLVM on Windows
问:
我正在使用 Windows 10 和 CMake 来构建我的项目(使用 MinGW Makefiles 作为生成器),同时选择 Clang/Clang++ (LLVM) 作为我的编译器,因为我的语言服务器协议也适用于 Clang。
但是,当尝试将我创建的静态库链接到我的主可执行文件时,翻译单元中的任何定义都无法解析。
对于简单的娱乐:
File system
+ root/
+ main.cpp
+ foobar.cpp
+ foobar.hpp
+ CMakeLists.txt
// main.cpp
#include <iostream>
#include "foobar.hpp"
int main( int argc, char** argv ) {
foo();
std::cin.get();
return 0;
}
// foobar.cpp
#include "foobar.hpp"
void foo() {
std::cout << "bar" << std::endl;
}
// foobar.hpp
#pragma once
#ifndef FOOBAR_HEADER_H
#define FOOBAR_HEADER_H
#include <iostream>
void foo();
#endif
# CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(linker_fail
VERSION 1.0.0
LANGUAGES C CXX)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_library(foobar
foobar.cpp
foobar.hpp)
add_executable(${PROJECT_NAME}
main.cpp)
target_link_libraries(${PROJECT_NAME} PUBLIC
foobar)
然后对于构建:
root> cmake -S . -B bin -G "MinGW Makefiles"
root> cmake --build bin
lld-link: error: undefined symbol: void __cdecl foo(void)
有谁知道如何解决这个问题?我应该将一些参数传递给编译器/链接器吗?还是 Clang 只是不允许静态链接?
答: 暂无答案
评论