【发布时间】:2016-10-19 15:47:40
【问题描述】:
我不知道如何在 Windows 上使用 cmake 将我的静态库与我的测试二进制文件链接起来。我做错了什么?
项目结构如下图
MyProject
- build
- include
- catch
- *.h
- MyProject
- *.h
- src
- *.c
- test
- *.cpp
- CMakeLists.txt
还有 CMakeLists.txt
CMAKE_MINIMUM_REQUIRED ( VERSION 3.3.1 )
SET ( NAME_LIB "myproject" )
SET ( NAME_TEST "test_myproject" )
SET ( PATH_BUILD "${PROJECT_SOURCE_DIR}/build" )
SET ( PATH_INCLUDE "${PROJECT_SOURCE_DIR}/include" )
SET ( PATH_SOURCE "${PROJECT_SOURCE_DIR}/src" )
SET ( PATH_TEST "${PROJECT_SOURCE_DIR}/test" )
FILE ( GLOB SOURCES_LIB "${PATH_SOURCE}/*.c" "${PATH_SOURCE}/*.cpp" )
FILE ( GLOB SOURCES_TEST "${PATH_TEST}/*.c" "${PATH_TEST}/*.cpp" )
INCLUDE_DIRECTORIES ("${PATH_INCLUDE}")
ADD_LIBRARY( ${NAME_LIB} STATIC "${SOURCES_LIB}" )
ADD_EXECUTABLE ( ${NAME_TEST} "${SOURCES_TEST}" )
TARGET_LINK_LIBRARIES ( ${NAME_TEST} "${PATH_BUILD}/${NAME_LIB}" )
使用 cmake 创建 Visual Studio 项目没问题,但是当我尝试使用 msbuild 构建解决方案时,出现以下错误。
(Link target) ->
LINK : fatal error LNK1104: cannot open file 'myproject.obj' [D:\Source\myproject\build\test_myproject.vcxproj]
指定库名而不是绝对路径时出错。
test_myproject.obj : error LNK2019: unresolved external symbol "int __cdecl myproject_parse(char const *)" (?myproject_parse@@YAHPBD@Z
) referenced in function _main [D:\Source\myproject\build\test_myproject.vcxproj]
D:\Source\myproject\build\Debug\test_myproject.exe : fatal error LNK1120: 1 unresolved externals [D:\Source\myproject\build\test_
myproject.vcxproj]
【问题讨论】:
-
您似乎在混合使用 C 和 C++,因此您必须确保
myproject_parse不受 C++ 名称修改的影响 -
能否请您使用dumpbin 输出myproject.lib 中的符号,例如
dumpbin /headers myproject.lib,并确保列出“解析”符号