【发布时间】:2019-02-10 03:35:34
【问题描述】:
我有以下文件树:
C:.
│ CMakeLists.txt
│ myLibraryHeader.h
│ test.c
│
└───myLib
├───win32
│ myLibrary.a
│
└───win64
myLibrary.a
以及以下 CMake 文件:
cmake_minimum_required(VERSION 2.8)
project(myProject)
link_directories(myLib/win32)
add_executable(main test.c)
target_link_libraries(main myLib/win32/myLibrary.a)
myLibraryHeader.h 是标头,而实现在 .a 文件中。
test.c 使用在 myLibraryHeader.h 中声明的函数。
但是,当我尝试使用 VS2013 编译器对其进行编译时,我收到此错误:
Error 1 error LNK1104: cannot open file 'myLibrary.lib'
VS寻找.lib文件而不是.a文件的原因是什么?
如何解决?
【问题讨论】:
-
根据doc,我相信您要么需要完整路径,要么只需要库名称。能否将库路径修改为
${CMAKE_CURRENT_SOURCE_DIR}/myLib/win32/myLibrary.a?那是怎么做的? -
静态库
myLibrary.a不是“win32”库。该库适用于 Linux,因为它具有.a扩展名。 MinGW 编译器/链接器也可以使用该库。但是在 Windows 上,静态库应该具有.lib扩展名(因此,它们应该由适当的编译器构建)。这就是VS2013寻找.lib文件的原因。 -
@Tsyvarev,鉴于库只有 C 内容(公共)
a库应该由 MSVC 使用而没有任何问题。 -
@ixSci:MSVC 第一次可以与
.a库一起使用。 MSVC 库的格式不应该与.a不同吗? -
@Tsyvarev,它们必须兼容才能支持 C 接口。我不能说格式的差异,但MSVC别无选择,只能支持它。