CMake没有链接静态库

时间:2017-07-05 20:32:04

标签: c++ cmake

我有一个在调试模式下编译的静态库(openexr.lib)。我试图将此库链接到我使用CMake创建的项目。这是我的文件夹结构。

+-- myproject
|   +-- Demo
|       +-- build
|       +-- libraries
|           +-- openexr.lib
|       +-- cmake
|           +-- GenerateVS2015.bat
|       +-- CMakeLists.txt
|       +-- Demo.cpp
|       +-- stdafx.cpp

因此,您可以看到我在libraries目录中有 openexr.lib 。我已经验证此.lib文件已编译为静态库,文件大小约为64mb。然后,我有一个批处理文件,可以在cmake目录中找到,它试图构建项目。这是我的批处理脚本的样子。

@echo off
set startingDir=%CD%
set basepath=%~dp0
set builddir=%basepath%\..\build
if exist %builddir% (@RD /S /Q %builddir%)
mkdir %builddir%
cd %builddir%
cmake -G "Visual Studio 14 2015 Win64" .. %*
cd %startingDir%

所以,这基本上创建了构建目录,如果它还没有存在(否则它会清除它以便它可以重新填充所有内容)。然后,它使用visual studio generator选项调用cmake命令。

现在,这是我的CMakeLists.txt文件中的内容:

CMAKE_MINIMUM_REQUIRED (VERSION 2.8)
PROJECT (MyProject)

IF ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
  ADD_DEFINITIONS(-DBUILD_DLL)
  SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} xmllite.lib")
  string(REGEX REPLACE "/bin/[^/]*$" "" VCINSTALLDIR "${CMAKE_C_COMPILER}")
  message(STATUS "Guessed MSVC directory: ${VCINSTALLDIR}")
ENDIF()

ADD_LIBRARY(openexr STATIC IMPORTED GLOBAL)
SET_TARGET_PROPERTIES(openexr PROPERTIES IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/libraries/openexr.lib)

ADD_EXECUTABLE(MyDemo ${CMAKE_CURRENT_SOURCE_DIR}/Demo.cpp ${CMAKE_CURRENT_SOURCE_DIR}/stdafx.cpp)
TARGET_LINK_LIBRARIES(MyDemo openexr)

当我运行我的批处理文件时,它会正确生成MyDemo.vcxproj文件。我可以看到它的设置使用目标扩展名.exe进行编译(这就是我想要的)。但是,当我尝试构建项目时,我收到以下错误消息:

C:\myproject\build\Debug\MyDemo.exe : fatal error LNK1120: 78 unresolved externals

如果我打开我的演示项目的属性页面,我可以在链接器部分下看到尝试链接到我的openexr.lib文件。

LINKER

但是,由于某种原因,每次我尝试构建可执行文件时它都会继续失败。任何人都可以提供理由吗?

修改 以下是完整错误日志的链接,如果它有帮助:errorlog.txt

0 个答案:

没有答案